有一些简单化合物,每种化合物有两种不同的元素组成,如果在这些化合物中存在k个化合物恰好含有k中不同的元素,则是危险的。
把每种元素看成节点,节点与节点之间的边为化合物,则在该无向图中若存在环,则有上述情况发生。
每次输入一对元素,输入完毕以-1表示,整体输入完毕以EOF表示
样例输入
1 2
3 4
3 5
3 1
2 3
4 1
2 6
6 5
-1
样例输出
3
#include <iostream>
#include <cstdio>
using namespace std;
const int MAX=100010;
int par[MAX];
int FindFather(int num)
{
while(par[num]>0)
num=par[num];
return num;
}
void InitPar()
{
for(int i=0;i<MAX;i++)
par[i]=0;
}
int main()
{
int x,y;
int m,n;
InitPar();
int ret=0;
while(~scanf("%d",&x))
{
if(x==-1)
{
cout<<ret<<endl;
InitPar();
continue;
}
scanf("%d",&y);
m=FindFather(x);
n=FindFather(y);
if(m!=n)
{
par[m]=n;
}
else
ret++;
}
return 0;
}