您的位置:首页 > 其它

LA3644——无向图中找环,并查集

2013-04-09 21:45 441 查看
题意:有一些简单化合物,每种化合物有两种不同的元素组成,如果在这些化合物中存在k个化合物恰好含有k中不同的元素,则是危险的。

把每种元素看成节点,节点与节点之间的边为化合物,则在该无向图中若存在环,则有上述情况发生。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

const int maxn = 100000 + 10;
int pre[maxn], num, res;

int Find(int a)
{
if(pre[a] != a) return pre[a] = Find(pre[a]);
else return a;
}

int main()
{
freopen("in.txt", "r", stdin);
int a, b;
for(int i = 0; i < maxn; ++i) pre[i] = i;
while(~scanf("%d", &a))
{
if(a == -1)
{
printf("%d\n", res);
for(int i = 0; i < maxn; ++i) pre[i] = i;
num = res = 0;
continue;
}
scanf("%d", &b);
if(Find(a) == Find(b) && num >= 2) { res++; }
else
{
pre[pre[a]] = pre[b];
num++;
}
}
return 0;
}

/*
1 2
3 4
3 5
3 1
2 3
4 1
2 6
6 5
-1

3
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: