202400610刷题总结

news/2024/10/7 14:24:00

T1

T559。

T2(带权并查集)

1380。
把行和列的取值看成变量,其中行取1代表+1,列取1代表-1,为了凑x - y = c,这样可以拿并查集来做了。
维护d[x],到根的距离,我们把边定义为+,反向走为-。这样就行了,如果在一个集合,那么判断距离是不是c。
还可以差分约束,dfs(直接遍历一遍,遇到环就判断).

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;const int N = 1010;int n, m, k;
int p[N << 1], d[N];int find(int x)
{if (p[x] == x) return x;int fa = find(p[x]);d[x] += d[p[x]];return p[x] = fa;
}int main()
{scanf("%d%d%d", &n, &m, &k);for (int i = 1; i <= n + m; i ++ ) p[i] = i;while (k -- ){int x, y, c;scanf("%d%d%d", &x, &y, &c);y += n;int px = find(x), py = find(y);if (px != py){p[py] = px;d[py] = d[x] + c - d[y];}else if (d[y] - d[x] != c){puts("No");return 0;}}puts("Yes");return 0;
}

T3(带权并查集,与上题类似)

换成乘。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>using namespace std;const int N = 20010;int p[N];
double d[N];
int n, m;int find(int x)
{if (p[x] == x) return x;int fa = find(p[x]);d[x] *= d[p[x]];return p[x] = fa;
}int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= n; i ++ ) p[i] = i, d[i] = 1;while (m -- ){int x, y, a, b;scanf("%d%d%d%d", &x, &y, &a, &b);int px = find(x), py = find(y);if (px != py){p[py] = px;d[py] = d[x] * a / b / d[y]; }else{if (abs(d[x] - (d[y] * b / a)) >= 1e-5){puts("No");return 0;}}}puts("Yes");return 0;
}

T4(差分约束,不等式及相对关系->差分约束)

1129。 https://www.luogu.com.cn/problem/P2474
这个题首先要想到枚举,然而我们不知道他们之间的关系,无法判断。求解相对关系,我们发现a+b = c+d 加法不好处理,这个等式实际上就是a - c = d - b,这样就转化为了求差值的范围,其实就是差分约束。不等式是啥呢?根据给定的图,a-b的关系就给了,floyd求差分约束就行了。最后暴力枚举判断。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;const int N = 110;int mind[N][N], maxd[N][N];
int n, A, B;
char g[N][N];void floyd()
{for (int k = 1; k <= n; k ++ )for (int i = 1; i <= n; i ++ )for (int j = 1; j <= n; j ++ ){mind[i][j] = max(mind[i][j], mind[i][k] + mind[k][j]);maxd[i][j] = min(maxd[i][j], maxd[i][k] + maxd[k][j]);}
}int main()
{freopen("balance.in", "r", stdin);freopen("balance.out", "w", stdout);scanf("%d%d%d", &n, &A, &B);for (int i = 1; i <= n; i ++ ){scanf("%s", g[i] + 1);for (int j = 1; j <= n; j ++ )if (i != j){if (g[i][j] == '+') mind[i][j] = 1, maxd[i][j] = 2;else if (g[i][j] == '?') mind[i][j] = -2, maxd[i][j] = 2;else if (g[i][j] == '-') mind[i][j] = -2, maxd[i][j] = -1;}}floyd();int c1 = 0, c2 = 0, c3 = 0;for (int i = 1; i <= n; i ++ )for (int j = i + 1; j <= n; j ++ )if (i != j && i != A && i != B && j != A && j != B){if (mind[A][i] > maxd[j][B] || mind[A][j] > maxd[i][B]) c1 ++ ;if ((maxd[A][i] == mind[A][i] && maxd[j][B] == mind[j][B] && mind[A][i] == maxd[j][B])|| (maxd[A][j] == mind[A][j] && maxd[i][B] == mind[i][B] && mind[A][j] == maxd[i][B]))c2 ++ ;if (maxd[A][i] < mind[j][B] || maxd[A][j] < mind[i][B]) c3 ++ ;}printf("%d %d %d\n", c1, c2, c3);fclose(stdin);fclose(stdout);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/42774.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

常微分方程

虽然这部分在笔记本上只有短短三页,但总是记不清公式,所以写下来,随时参考 规定 \(\int{p(x)\mathrm{d}x}\) 不含 \(C\) 一阶微分方程 一、变量分离方程 \[\frac{\mathrm d y}{\mathrm d x}=\frac{X(x)}{Y(y)} \]解:移项积分 \(\int{Y(y)}\mathrm{d}y=\int{X(x)}\mathrm{d}…

Python爬虫:通过js逆向了解某音请求接口参数a_bogus加密过程

1. 前言 需要提前说明以下,本篇文章讲述的内容仅供学习,切莫用于商业活动,如若被相关人员发现,本小编概不负责!切记。。 本次分析的接口为:https://www.douyin.com/aweme/v1/web/discover/search/ 它的请求方式为:GET 请求需要的参数有:请求参数中需要进行js逆向是:a_…

Chapter1 p1 Output Image

由于本文章是对TinyRenderer的模仿,所以并不打算引入外部库。 那么我们第一步需要解决的就是图形输出的问题,毕竟,如果连渲染的结果都看不到,那还叫什么Renderer嘛。 由于不引入外部库,所以选择输出的图片格式应该越简单越好,各种位图就成为了我们的首选。 这里我们选择了…

吴恩达机器学习第三课 Unsupervised learning recommenders reinforcement learning

Unsupervised learning recommenders reinforcement learning 1.1 课程介绍2.1 什么是聚类

KPTI——可以缓解“熔断” (Meltdown) 漏洞的内核新特性

Linux 内核修复办法:内核页表隔离KPTl(kernel page table isolation)每个进程一张页表变成两张:运行在内核态和运行在用户态时分别使用各自分离的页表Kernel页表包含了进程用户空间地址的映射和Kernel使用的内存映射用户页表仅仅包含了用户空间的内存映射以及内核跳板的内存映射…

吴恩达机器学习第二课 Advanced Learning Algorithms

Advanced Learning Algorithms week1 1.1 神经元和大脑1.2 需求预测构建自己神经网络的时候:需要决定隐藏层的个数和每个隐藏层的神经元个数1.3 图像感知 像素的亮度值从0~255变化 人脸识别:训练一个神经网络,以一个特征向量作为输入,输出图片中人的身份2.1 神经网络中的网…

nanoDLA逻辑分析仪上手教程

逻辑分析仪分析自定义总线数据前言 最近调试NXP FRDM-MCXN947开发板,发现它的硬件i2c接口读取的传感器数据老是不对,排查了硬件电路也发现不了啥问题;于是乎想到用逻辑分析仪试一下,果然很快定位到问题所在;还是那句话,用对的工具做对的事情,别浪费时间!这篇文章主要关…

字符串处理,push pop路径,组合命令

字符串处理字符串截取、命令嵌套命令格式:%变量名:~ m,n%,其中,m表示开始位置(默认开头),n表示从m位置开始向后截取的字符个数(默认到结尾),若n为负数则表示向前截取个数,作用:将命令中的某段字符截取,通过call将字符做为命令执行。 @echo offset str1=aaa echo ok bbb…