![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
winhcc
这个作者很懒,什么都没留下…
展开
-
Codeforces 1139C
看似很难,实则很简单的一道题,把样例推出来就想明白了。 首先从正面肯定不好搞,故反面求之,若一条边的color是0,可知k位可以从该边连接的两点任选,,减去2^ k。同理,若由三个点两两相连的边都是0,那么从3个点人选,即3^k。 想到了什么?? 对,就是并查集! 最后,对一个点,若与之相连的所有边都是1,就要减1,也就是1^k。 #include<bits/stdc++.h> usi...原创 2019-03-22 14:08:40 · 401 阅读 · 0 评论 -
poj 1988
一开始有n个木块在一行,有两种操作,第一种是把m所在的那一堆放到n所在的那一堆上面,第二种是查询木块m下面有多少个木块。 用并查集,将最底下的木块记录为根,则一个木块到最底下的距离就是该木块到根的距离。 如果连通分量a有2个木块,b有3个木块,则a的根到b的根的距离就是3,可知距离和当前连通分量的大小是有关的,因此要用一个数组记录。 查询时,有可能当前的根节点没更新过,所以要先更新路径 并查集的深...原创 2019-04-26 15:06:30 · 323 阅读 · 0 评论 -
poj 1182,poj 1703,hdu 1829
这一类的题目都是n个东西属于不同的集合,集合中的情况要么同时发生,要么同时不发生。 poj 1182 是书上的题目,有详解 poj 1703 和 hdu 1829 都是只有两个集合 poj 1703 #include <cstdio> const int N = 1e5 * 2 + 10; char s[2]; int n,m,x,y,fa[N],t; int find(int x)...原创 2019-04-26 16:11:45 · 159 阅读 · 0 评论