
并查集
文章平均质量分 73
皮得一1
这个作者很懒,什么都没留下…
展开
-
poj 1182 食物链(并查集)
Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N个动物所构成的食物链关系进行描述: 第一种说法是"1 X Y",表示X和Y是同类。 第二种说法是"2 X Y",表示X吃Y。 此人对N个原创 2016-01-20 10:11:37 · 322 阅读 · 0 评论 -
poj 1308 Is It A Tree?(并查集)
思路同hdu 1272#include#include#includeusing namespace std;#define MAXN 1005int fa[MAXN],sign[MAXN],flag;int set_find(int d){ if(fa[d]<0)return d; return fa[d]=set_find(fa[d]);}void原创 2016-01-19 16:01:09 · 366 阅读 · 0 评论 -
hdu 1272 小希的迷宫(并查集)
Description上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了房间A和B,那么既可以通过它从房间A走到房间B,也可以通过它从房间B走到房间A,为了提高难度,小希希望任意两个房间有且仅有一条路径可以相通(除非走了回头路)。小希现在把她原创 2016-01-19 15:27:30 · 279 阅读 · 0 评论 -
hdu 3038 How Many Answers Are Wrong
题意:有 n 个数,你不知道它们的值, 然后又有 m 行数,每行 a ,b ,c,表示 a 到 b 之间所有数的和为c(包含了第a个和第b个数)。但是这m行数里面有些是错的,就是与前面给的条件相冲突的,求有几行数据是错的。思路:用并查集,同样,还是需要一个辅助数组r[]记录每一个点跟根节点的关系。首先我们可以把问题稍微转化一下,就是如果已知[3,6],[7,10]俩个区间内各自所有数的和,原创 2016-01-19 14:46:47 · 358 阅读 · 0 评论 -
hdu 1213 How Many Tables(并查集)
#include#include#includeusing namespace std;#define MAXN 1024int fa[MAXN];int set_find(int d){ if(fa[d]<0)return d; return fa[d]=set_find(fa[d]);}void set_join(int x,int y){原创 2016-01-19 09:45:57 · 331 阅读 · 0 评论 -
检查网络(并查集)
题目要求:给定一个计算机网络以及机器的双向连线列表,每一条连线允许两端的计算机进行直接的文件传输,其他计算机间若存在一条连通路径,也可以进行间接的文件传输,请写程序判断,任意指定两台计算机,它们之间是否可以进行文件传输?输入要求:输入由若干组测试数据组成。对于每一组测试数据,第1行包含一个整数N(当N为0时,表示全部测试结束,不要对该数据做任何处理。输出要求:对每一组C开头原创 2016-01-19 09:38:52 · 1349 阅读 · 0 评论 -
poj 1611 The Suspects(并查集)
#include#include#includeusing namespace std;#define MAXN 30005int fa[MAXN];int set_find(int d){ if(fa[d]<0)return d; return fa[d]=set_find(fa[d]);}void set_join(int x,int y){原创 2016-01-19 09:35:06 · 336 阅读 · 0 评论 -
poj 2236 Wireless Network(并查集)
思路:简单并查集,当两个点距离#include#include#includeusing namespace std;#define MAXN 1024int fa[MAXN];int x[MAXN],y[MAXN];bool repaired[MAXN];int set_find(int d){ if(fa[d]<0)return d; re原创 2016-01-19 09:21:00 · 325 阅读 · 0 评论 -
hdu 1232 畅通工程(并查集)
思路:并查集基本内容。#includeconst int MAXN=1010;int F[MAXN];int find(int t){ if(F[t]==-1) return t; return F[t]=find(F[t]);} void bing(int a,int b){ int t1=find(a); int t2=find(原创 2015-11-29 21:03:32 · 437 阅读 · 0 评论