当前位置:   article > 正文

【蓝桥杯集训】Acwing1249.亲戚

【蓝桥杯集训】Acwing1249.亲戚
1. 题目内容

2. 解题重点

并查集,将有关系的群体融合在一起。为有关系的亲戚设立一个“头头”,如果你的“头头”和我的“头头”一样,则说明我们是一家人。假如给的条件中发现两个头头不同的人也是一家人,那就让其中一家人的头头认另一家的头头为新的头头。

3.答案
  1. #include <iostream>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N=20010;
  6. int n,m;
  7. int p[N];
  8. //找头头
  9. int find(int x){
  10. if(p[x]!=x) p[x]=find(p[x]);
  11. return p[x];
  12. }
  13. int main(){
  14. scanf("%d%d",&n,&m);
  15. //设立头头
  16. for(int i=1;i<=n;i++){
  17. p[i]=i;
  18. }
  19. //根据关系设立新的头头
  20. while(m--){
  21. int a,b;
  22. scanf("%d%d",&a,&b);
  23. p[find(a)]=find(b);
  24. }
  25. scanf("%d",&m);
  26. //判断是不是一家人
  27. while(m--){
  28. int a,b;
  29. scanf("%d%d",&a,&b);
  30. if(find(a)==find(b))
  31. puts("Yes");
  32. else
  33. puts("No") ;
  34. }
  35. return 0;
  36. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/476958
推荐阅读
相关标签
  

闽ICP备14008679号