HDU 1213 How Many Tables (并查集)

一时失言乱红尘 2022-06-05 01:55 280阅读 0赞
  1. //题意自己看,不会度娘
  2. #include <stdio.h>
  3. #include <string.h>
  4. int a[1050];
  5. int merge(int x)
  6. {
  7. int r=x;
  8. while(a[r]!=r)
  9. r=a[r];
  10. return r;
  11. }
  12. void findx(int x,int y)
  13. {
  14. int fx=merge(x);
  15. int fy=merge(y);
  16. if(fx!=fy)
  17. a[fx]=fy;
  18. }
  19. int main(int argc, char *argv[])
  20. {
  21. int t;
  22. int n,m,i;
  23. int x,y;
  24. int flag;
  25. scanf("%d",&t);
  26. while(t--)
  27. {
  28. scanf("%d",&n);
  29. for(i=1;i<=n;i++)
  30. a[i]=i;
  31. for(scanf("%d",&m);m>0;m--)
  32. {
  33. scanf("%d %d",&x,&y);
  34. findx(x,y);
  35. }
  36. for(flag=0,i=1;i<=n;i++)
  37. if(a[i]==i)
  38. flag++;
  39. printf("%d\n",flag);
  40. }
  41. return 0;
  42. }
  43. //Start-ZJ
  44. //2017/11/14/19:42

发表评论

表情:
评论列表 (有 0 条评论,280人围观)

还没有评论,来说两句吧...

相关阅读