文章
39
粉丝
74
获赞
1
访问
20.5k
#include <stdio.h>
#include <stdlib.h>
int xiangsi[10000000];
int chaoxi[10000000];
int tuanhuo[10000000];
int n,m;
int find1(int x){
if(x!=xiangsi[x])xiangsi[x]=find1(xiangsi[x]);
return xiangsi[x];
}
int find2(int x){
if(x!=chaoxi[x])chaoxi[x]=find2(chaoxi[x]);
return chaoxi[x];
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
xiangsi[i]=i;
chaoxi[i]=i;
tuanhuo[i]=0;
}
int a,b;
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
if(find1(a)!=find1(b)){
xiangsi[find1(a)]=find1(b);//挂到一个集合下
}else{
chaoxi[find2(a)]=find2(b);
}
}
//统计抄袭人数
for(int i=1;i<=n;i++){
tuanhuo[find2(i)]++;
}
int cout=0;
for(int i=1;i<=n;i++){
if(tuanhuo[i]>=2)cout++;
}
printf("%d\n",cout);
return 0;
}
借鉴了另一个题解,不过写的稍微简洁,仅供参考
登录后发布评论
暂无评论,来抢沙发