记录编号 302792 评测结果 AAAAAAAAAA
题目名称 宗教信仰 最终得分 100
用户昵称 Gravatarliu_runda 是否通过 通过
代码语言 C++ 运行时间 1.050 s
提交时间 2016-09-04 16:59:53 内存使用 0.95 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<cctype>
  3. int read(){
  4. int x;char ch;
  5. while(ch=getchar(),!isdigit(ch));
  6. x=ch-'0';
  7. while(ch=getchar(),isdigit(ch))x=x*10+ch-'0';
  8. return x;
  9. }
  10. const int maxn=100005;
  11. int ufs[maxn],sz[maxn];
  12. int find(int x){
  13. int rt=x;
  14. while(rt!=ufs[rt])rt=ufs[rt];
  15. int y;
  16. while(x!=ufs[x]){
  17. y=ufs[x];
  18. ufs[x]=rt;
  19. x=y;
  20. }
  21. return rt;
  22. }
  23. void link(int a,int b){
  24. if(find(a)==find(b))return;
  25. if(sz[ufs[a]]>sz[ufs[b]]){
  26. sz[ufs[a]]+=sz[ufs[b]];
  27. ufs[ufs[b]]=ufs[a];
  28. }else{
  29. sz[ufs[b]]+=sz[ufs[a]];
  30. ufs[ufs[a]]=ufs[b];
  31. }
  32. }
  33. int main(){
  34. freopen("religion.in","r",stdin);
  35. freopen("religion.out","w",stdout);
  36. int n=read(),m=read();
  37. for(int i=1;i<=n;++i)ufs[i]=i,sz[i]=1;
  38. int ans=0,a,b;
  39. while(m--){
  40. a=read();b=read();
  41. link(a,b);
  42. }
  43. for(int i=1;i<=n;++i)if(ufs[i]==i)ans++;
  44. printf("%d\n",ans);
  45. fclose(stdin);fclose(stdout);
  46. return 0;
  47. }