题意:给定每组有两个数字,且每组的数字都不相同,假设有n组共有n个不同的数字则会发生爆炸,这一组便不予接受,否则则接受。问有多少组不接受。
思路:用并查集,假设有两个数字已经在同一组了,那么就会出现环。
AC代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int T,t,n,m;
int p[100010];
int find(int x)
{
return p[x]==x ? x : p[x]=find(p[x]);
}
void init()
{
int i;
for(i=1;i<=100000;i++)
p[i]=i;
}
int main()
{
int i,j,k,x,y,ans=0;
init();
while(~scanf("%d",&x))
{
if(x==-1)
{
printf("%d\n",ans);
ans=0;
init();
continue;
}
scanf("%d",&y);
x=find(x);
y=find(y);
if(x==y)
ans++;
else
p[x]=y;
}
}