并查集
ConwayTian
一切再来,为时未晚。
毁掉你人生的,其实是你内心的平庸,是你失去追求卓越的那个瞬间。
展开
-
POJ 2524 Ubiquitous Religions 并查集
题意:给出一些数对,表示这两个人有相同的宗教信仰,现在要求人们信仰的宗教最多有多少种。 题解:并查集。 #include #include int father[50001],r[50001]; int m,n,res; void make_set () { for ( int i = 1; i <= n; i++ ) father[i] = i; mems原创 2011-07-24 14:38:41 · 542 阅读 · 0 评论 -
POJ 2513 Trie树+并查集
题意:一根木棍的两端都涂有颜色,现在有一系列的木棍,问能否将它们连成一条直线,使两木棍的结合点处颜色一致。 解法:以颜色为节点,木棍为边。 通过字典树给颜色编号,然后通过并查集来检验图的连通性,最后统计每种颜色的度,判断是否是欧拉图或者欧拉半图。 #include using namespace std; const int kind = 26; const int MAX = 5原创 2011-08-05 20:10:55 · 629 阅读 · 0 评论 -
POJ 2492 并查集
题意:调查一种虫子的性行为,先假定虫子里没有同性恋。每一次测试输入N只虫,然后输入M个数对( x, y ),表示 x, y 之间有性行为, 最后判断假设成立与否(即判断有没有同性恋)。 #include using namespace std; #define N 1000005 int opp[N], father[N], rank[N]; void make_set ( i原创 2011-08-11 17:03:14 · 1401 阅读 · 0 评论 -
POJ 1703 并查集
题意: 有两黑帮,N个人,现在又一些信息,你需要根据这些信息确定这两个人之间是否属于同一个黑帮。有两种输入: D a b 表示a,b不属于同一个黑帮;A a b 询问a,b是否属于同一个黑帮,可以回答属于,不属于,不确定三种。 题解: 可以用带权的并查集解决。若a,b同属于一个集合说明二者的关系已经确定,输出属于或者不属于;否则输出不确定。当a,b同属于一个集合时,可以通过权值来判断它们的具原创 2011-08-11 15:23:24 · 955 阅读 · 0 评论 -
POJ 1611 The Suspects 并查集
题意:sars感染者呆过的每一个group的所有人都被认为是感染者,要求所有可能被感染的人数。 题解: 并查集 #include #include int father[30001], num[30001], r[30001]; /* 数组r表示秩的大小 */ int n,m; void make_set() { for ( int i = 0; i < n;原创 2011-07-24 21:26:51 · 494 阅读 · 0 评论 -
最短路 并查集/利用边的性质求最短路
题意:N个城市,标号从0到N-1,M条道路,第K条道路(K从0开始)的长度为2^K,求编号为0的城市到其他城市的最短距离 输入:第一行两个正整数N(2 接下来M行两个整数,表示相连的两个城市的编号,输入数据中保证没有重边 输出:N-1行,表示0号城市到其他城市的最短路,如果无法到达,输出-1,数值太大的以MOD 100000 的结果输出。 思路: 由于第i条边的权值w[i] = 2^i,原创 2012-04-22 15:49:41 · 5532 阅读 · 1 评论