poj 1703 - Find them, Catch them(并查集)
2013-10-14 17:17
417 查看
思路:
只要两者的关系确定了,就将他们加入一个集合中,另外增加一个表示关系的数组flag,来表示该节点与其父节点的关系,0表示是同一类,1表示是不同团伙。
初始时,集合只有自己一个元素。flag设置为0.
代码如下:
只要两者的关系确定了,就将他们加入一个集合中,另外增加一个表示关系的数组flag,来表示该节点与其父节点的关系,0表示是同一类,1表示是不同团伙。
初始时,集合只有自己一个元素。flag设置为0.
代码如下:
const int M = 100005; int flag[M], p[M]; int find(int x) { int tmp = p[x]; p[x] = (p[x]==x?x:find(p[x])); flag[x] = (flag[x]==flag[tmp]?0:1); return p[x]; } char get_char() { char c; while(1) { c = getchar(); if(c=='A'||c=='D') return c; } } int main() { int t, n, m, a, b, c, x, y; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m); memset(flag,0,sizeof(flag)); for(int i = 0; i <= n; ++i) p[i] = i; for(int i = 0; i < m; ++i) { c = get_char(); scanf("%d %d", &a, &b); x = find(a); y = find(b); if(c=='A') { if(x!=y) puts("Not sure yet."); else if(flag[a]==flag[b]) puts("In the same gang."); else puts("In different gangs."); } else { if(x!=y) { p[x] = y; flag[x] = (flag[a]==flag[b]?1:0); } } } } return 0; }
相关文章推荐
- POJ 1703 Find them, Catch them(种类并查集)
- poj 1703 Find them, Catch them(并查集应用)
- POJ1703--Find them, Catch them--并查集
- poj 1703 Find them, Catch them(并查集)
- 并查集 示例 : poj 1703 [Find them, Catch them - 帮派之争]
- POJ 1703 Find them, Catch them(并查集)
- POJ 1703 Find them, Catch them (数据结构-并查集)
- POJ---1703 Find them, Catch them [并查集]
- POJ 1703 Find them, Catch them(并查集)
- 并查集变式 POJ 1703 Find them,Catch them
- ♥POJ 1703-Find them, Catch them【并查集】
- poj 并查集 - 1703 Find them, Catch them
- POJ 1703 Find them, Catch them 种类并查集
- poj 1703 Find them, Catch them 并查集
- poj1703--Find them, Catch them(并查集应用)
- POJ - 1703 Find them, Catch them (并查集2)
- poj 1703 Find them, Catch them(并查集)
- POJ - 1703 - Find them, Catch them (并查集)
- poj 1703 Find them, Catch them(并查集)
- POJ 1703 Find them, Catch them (数据结构-并查集)