随笔分类 - 5.02.0 并查集
摘要:有 k 条特殊边的生成树 我们发现有一些边是必须的,如果把所有的水泥路都加入并查集,再枚举鹅卵石路,如果这条路能再次加入并查集,说明这条路是必须的 水泥路同样 这样就把必需边求出来了,剩下就可以随意加边了 cpp include include include include include usi
阅读全文
摘要:并查集 首先将 sum[l, r] 的奇偶性转换成 sum[1, l 1] 和 sum[1, r] 的奇偶性是否相同 注意是 l 1 然后维护并查集,有边带权和扩展域两种做法 边带权 若两数奇偶性相同,边权为 0 ,若不同,边权为 1 ,然后异或处理即可 cpp include include in
阅读全文
摘要:辣鸡并查集 用并查集记录最近的可行点 cpp include include include include include using namespace std; const int MAXN = 100005; int fa[MAXN], n, ans; struct good{ int co
阅读全文
摘要:并查集+ 离散化 首先本题的数据范围很大,需要离散化, STL离散化代码: cpp //dat是原数据,id是编号,sub是数据的副本 sort(sub + 1, sub + tot + 1); size = unique(sub + 1, sub + tot + 1) sub 1; for(int
阅读全文
摘要:所谓带权并查集 本题所求的不止是两个编号之间是否有关系,还要求两个编号之间有什么关系,这就要求我们维护多个数组,fa[]数组维护两个编号之间的连通性,dis[]维护编号为i的战舰到fa[i]之间的距离,num[]维护编号为i的战舰所在的那一列有多少战舰。 find函数 每次find的时候都更新num
阅读全文
摘要:并查集 这是一道比较特殊的并查集,开一个三倍的数组, 1~n保存同类,n~n×2保存猎物,n 2~n 3保存天敌; include include include include using namespace std; const int MAXN=300005; int read(){ int
阅读全文
摘要:求有向图的权值为一的最小环 并查集做法 维护一个dis[],表示i号元素到fa[i]的距离。 对于输入的每两个点u,v,询问这两个点的fa[]是否相同,如果相同就成环,维护最小值,mi=min(mi,dis[u]+dis[v]+1)。如果不相同,merge(u,v)。目测是最简单的做法。 但是只适用
阅读全文

浙公网安备 33010602011771号