并查集合并

#include<iostream>
using namespace std;
const int MAX = 10010;
int father[MAX],root[MAX];
int findfather(int x){if(x==father[x]) return x;else{int F=findfather(father[x]);father[x]=F;return F;}
}
void Union(int a , int b){int faA=findfather(a);int fbB=findfather(b);if(faA!=fbB){father[faA]=fbB;}
}
void init(){for(int i=0;i<MAX;i++){father[i]=i;root[i]=0;}
}
int n,q;
int main(){init();cin>>n;int maxbirds=0; for(int i=0;i<n;i++){int nbirds,firstbird;scanf("%d%d",&nbirds,&firstbird);if(firstbird>maxbirds) maxbirds=firstbird;for(int j=1;j<nbirds;j++){int bird;scanf("%d",&bird);if(bird>maxbirds) maxbirds=bird;Union(firstbird,bird);}}int trees=0;for(int i=1;i<=maxbirds;i++){int fa=findfather(i);root[fa]++;if(root[fa]==1) trees++;}printf("%d %d\n",trees,maxbirds);cin>>q;while(q--){int a , b;scanf("%d%d",&a,&b);if(findfather(a)==findfather(b)) printf("Yes\n");else printf("No\n");}
}

非递归压缩并查集

int father[MAX];
bool isRoot[MAX];//判根  int findFather( int x ) {  int a = x;  while( x != father[x] ) {  x = father[x];  }  while( a != father[a] ) {  int z = a;  a = father[a];  father[z] = x;  }  return x;
}  void Union( int a, int b ) {  int faA = findFather( a );  int faB = findFather( b );    if( faA != faB ) {  father[faA] = faB;  }
}  void init( int n ) {  for( int i = 1; i <= n; i++ ) {  //从1开始father[i] = i;  isRoot[i] = false;  }
}  

转载于:https://www.cnblogs.com/demian/p/6102945.html

PAT A 1118. Birds in Forest (25)【并查集】相关推荐

  1. PAT题解-1118. Birds in Forest (25)-(并查集模板题)

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...

  2. PAT甲级1118 Birds in Forest :[C++题解]并查集

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:并查集的合并和查询. 问:一张照片上的鸟如何合并?相邻的合并(笔者采用的方式)或者全合并到第一只鸟就行,遍历一遍.所有照片中的鸟,合并 ...

  3. 【题解】1118 Birds in Forest (25分)⭐⭐ 【并查集】

    [题解]1118 Birds in Forest (25分)⭐⭐ [并查集] 题解: 简单并查集,并一下查一下就好了,没学的同学抓紧学一下 经验小结: #include<bits/stdc++. ...

  4. 1118. Birds in Forest (25)

    并查集...要用路径压缩,不然会超时, #include<iostream> #include<string> #include<map> #include< ...

  5. PAT甲级题目翻译+答案 AcWing(并查集)

    1013 Battle Over Cities (25 分) 题意 :给图,问去掉所询问的一个点后,需要添加多少条边可以使图连通,N<1000N<1000N<1000 思路 :并查集 ...

  6. PolandBall and Forest(并查集)

    PolandBall lives in a forest with his family. There are some trees in the forest. Trees are undirect ...

  7. PAT - L1-020. 帅到没朋友(裸并查集)

    L1-020. 帅到没朋友 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为 ...

  8. CodeForces - 755C PolandBall and Forest (并查集)

    题意:给定n个数,Ai的下标为1~n.对于每一个i,Ai与i在同一个树上,且是与i最远的点中id最小的点(这个条件变相的说明i与Ai连通).求森林中树的个数. 分析:若i与Ai连通,则在同一个树上,因 ...

  9. L2-010. 排座位-PAT团体程序设计天梯赛GPLT(并查集)

    布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席. 输入格式: ...

最新文章

  1. iOS 项目集成Flutter
  2. 达观数据分析平台架构和Hive实践——TODO
  3. Java并发编程(十三)同步容器类
  4. proDAD Erazr便携版
  5. java jdbc dbcp连接SQL Server
  6. 1001:Hello,World!
  7. CodeVS 1300 文字排版 线性DP
  8. matlab qtdecomp,Opencv图像识别从零到精通(25)------区域分裂与合并
  9. centos 关闭开启防火墙
  10. 自动生成三层结构代码(2)--生成实体类
  11. CoreData整理(二)——多线程方案
  12. luogu P4843 清理雪道
  13. BZOJ 3531[Sdoi2014]旅行
  14. BZOJ3828 : [Poi2014]Criminals
  15. jQuery天猫商品分类导航菜单
  16. matlab 里%s,matlab中fprintf函数的用法详解-PHP问题
  17. VC6.0 files---open 出现 MSDEV.exe错误,Project ---- add to project 出现错误等等~~
  18. excel填充序列_EXCEL工资表制作后导入工资条方法,实现1秒搞定,万人群发
  19. 计算机课程说课ppt模板,信息技术说课ppt模板
  20. 安装xDroid一直提示无法执行二进制文件:可执行文件格式错误,怎么办

热门文章

  1. 【HDU - 1452】 Happy 2004(因子和,逆元,快速幂)
  2. 动手学PaddlePaddle(5):迁移学习
  3. vs怎么把textbox输入的实数放置变量里_方程的计算机处理96(3)_C++vs
  4. html 按钮 按下 状态_第一次按下是启动,第二次按下是停止,俵哥分享2种接线方法...
  5. java 内部类私有成员 能访问,为什么外部Java类可以访问内部类私有成员?
  6. mysql外键教程_关于MySQL外键的简单学习教程
  7. 基于多线程的TCP局域网通信,客户端向服务端上传 文件简单实现源码
  8. 在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。 * (静态初始化一个数组,在数组中随意写入6个分数) 选手的最后得分为: * 去掉一个最高分和一个最低分后 的4个评委平均值。
  9. 超经典,百度最爱考的安卓Android百题
  10. leetcode276. 栅栏涂色