通用版四N题并查集

xiaoxiao2021-02-28  51

wa:find函数写错了,在此贴出..

#include<stdio.h> int father[50005]; int find(int x) { if (father[x]!=x) father[x]=find(father[x]); else return father[x]; } int main() { long long cas=0; while (1) { long long n,m,i,x,y,c=0; scanf("%lld%lld",&n,&m); if (n==0&&m==0) return 0; for (i=1;i<=n;i++) father[i]=i; for (i=1;i<=m;i++) { scanf("%lld%lld",&x,&y); if (find(x)!=find(y)) father[find(y)]=find(x); } for (i=1;i<=n;i++) { find(i); if (father[i]==i) c++; } printf("Case %lld: %lld\n",++cas,c); } }

简单的并查集,输出总数即可,石头剪刀步类型的还是一脸蒙蔽

#include<stdio.h> int father[50005]; int find(int x) { return father[x]==x?x:find(father[x]); } int main() { long long cas=0; while (1) { long long n,m,i,x,y,c=0; scanf("%lld%lld",&n,&m); if (n==0&&m==0) return 0; for (i=1;i<=n;i++) father[i]=i; for (i=1;i<=m;i++) { scanf("%lld%lld",&x,&y); if (find(x)!=find(y)) father[find(y)]=find(x); } for (i=1;i<=n;i++) { find(i); if (father[i]==i) c++; } printf("Case %lld: %lld\n",++cas,c); } }
转载请注明原文地址: https://www.6miu.com/read-2623362.html

最新回复(0)