题目链接:https://cn.vjudge.net/contest/320541#problem/B
翻译:给定几组关系,求是否能构成环,求构成环的个数。
分析:构成环的条件,a,b有相同的祖先,a能直接到祖先,也能通过b找到祖先,所以能构成环。
代码:
#include<cstdio>
#include<cstring>
int n,m,f[1001];
int getf(int u)
{
if(u==f[u])
return f[u];
else
return f[u]=getf(f[u]);
}
int gether(int u,int v)
{
int t1=getf(u);
int t2=getf(v);
if(t1!=t2)
{
f[t2]=t1;
return 0;
}
return 1;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
int a,b,ans=0;
for(int i=0; i<n; i++)
f[i]=i;
for(int i=0; i<m; i++)
{
scanf("%d%d",&a,&b);
if(gether(a,b))
ans++;
}
printf("%d\n",ans);
}
return 0;
}