
并查集
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 · 433 阅读 · 0 评论 -
poj 1988
一开始有n个木块在一行,有两种操作,第一种是把m所在的那一堆放到n所在的那一堆上面,第二种是查询木块m下面有多少个木块。用并查集,将最底下的木块记录为根,则一个木块到最底下的距离就是该木块到根的距离。如果连通分量a有2个木块,b有3个木块,则a的根到b的根的距离就是3,可知距离和当前连通分量的大小是有关的,因此要用一个数组记录。查询时,有可能当前的根节点没更新过,所以要先更新路径并查集的深...原创 2019-04-26 15:06:30 · 357 阅读 · 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 · 181 阅读 · 0 评论