摘要:
拓扑排序 在一个有向无环图(DAG)中,我们将节点按照线性方式进行排序,使得对于任何的顶点u到v的有向边(u,v),都可以有u在v的前面。我们定义如果i到j有边,则认为j依赖于i,拓扑排序目标就是对节点进行排序,使得排在前面的节点不会依赖于后面的节点 Kahn算法:$O(E+V)$ int n, m 阅读全文
摘要:
CodeForces - 1213G Path Queries 题解:并查集+思维 现在给你由许多边组成的树,离线询问路径最大权重不超过$w^i$的路径数量 我们不一定要在树上找,我们可以通过他询问的$w^i$,去一步步构建树,先按照边权排序,比如说w=1,我们就把所有权值为1的边构建出来,然后路径 阅读全文
摘要:
Gym - 102770I 题解:并查集+离散化+map 首先题目确保每双袜子都是成对的,我们很容易发现袜子之间存在限制条件比如 1 2 2 3 1 3 所以我们往建图方面想,这样每一个关系都代表了一个连通块,我们只要找到哪个连通块里面点数最多不就好了,点数我们可以用map,或者szp数组来求,但是 阅读全文
摘要:
POJ - 1182 食物链 题解:种族并查集 引理:对于普通的并查集,我们总是用来查找和维护每个元素之间的同类关系,而种族并查集总是用来解决一些存在对立关系,而且对象的关系存在传递性和循环性,比如食物链:A->B,B->C,C->A,或者说敌人的敌人是朋友,朋友的朋友是朋友这些关系,我们可以开多个 阅读全文
摘要:
OpenJ_Bailian - 1751 题解:最小生成树问题,Kruskal算法 已经帮你建好的边就不用再建了,直接合并,当然我们这一题需要将给的坐标转化成边的,然后我们如何输出建哪几条路呢?我们知道我们合并的时候其实就是建路的过程,所有我们可以修改一下merge函数,增加一维参数op,代表是否输 阅读全文
摘要:
并查集 初始化$O(n)$ int fa[N], szp[N], sze[N], loop[N]; //fa根节点,szp点的数量,sze边的数量,loop自环的数量 int n, m; //n代表点数,m代表边数 void init() //初始化 { for (int i = 1; i <= n 阅读全文
摘要:
CodeForces - 835C Star sky 题解:二维前缀和 二维平面上给你点和坐标,让你求总亮度,很容易想到二维前缀和,但是题目很抽象,又给了你一个时间,就是说,每过一个单位时间,它的亮度会有改变,这该怎么办? 实际上,我们观察发现,一开始初始亮度一样的点,在经历时间t后亮度还是保持一样 阅读全文
摘要:
CodeForces - 1303D Fill the bag 题解:二进制+思维 首先我们发现这肯定与二进制有关,n的二进制形式肯定有1,所以我们去从低位到高位遍历n的二进制的时候,加入现在这一位是1,那我们肯定想要知道现在有没有这么大的盒子,如果没有这么大的盒子,那我们需要拆更大的盒子,所以我们 阅读全文
摘要:
CodeForces - 1225C p-binary 题解:二进制 + 思维 由题意得: 让我们求出K的最小值使得$\sum_{i=1}^{k}2^{a^i}+p=n$成立,将式子改变一下形式得到$n-kp=\sum_{i=1}^{k}2^{a^i}$,所以我们可以知道$n-kp$可以由K个$2^ 阅读全文
摘要:
CodeForces - 1698D Fixed Point Guessing 题解:二分+交互题 题目给出询问次数为15次,而$3<=n<10^4$,很明显是二分 题目想要我们找出在数组长度n为奇数的情况下,交换$\frac{n-1}{2}$对互不干扰的元素,让我们找出哪一个元素没有被交换 直接看 阅读全文