PAT A 1118. Birds in Forest (25)【并查集】
并查集合并
#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)【并查集】相关推荐
- PAT题解-1118. Birds in Forest (25)-(并查集模板题)
如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...
- PAT甲级1118 Birds in Forest :[C++题解]并查集
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:并查集的合并和查询. 问:一张照片上的鸟如何合并?相邻的合并(笔者采用的方式)或者全合并到第一只鸟就行,遍历一遍.所有照片中的鸟,合并 ...
- 【题解】1118 Birds in Forest (25分)⭐⭐ 【并查集】
[题解]1118 Birds in Forest (25分)⭐⭐ [并查集] 题解: 简单并查集,并一下查一下就好了,没学的同学抓紧学一下 经验小结: #include<bits/stdc++. ...
- 1118. Birds in Forest (25)
并查集...要用路径压缩,不然会超时, #include<iostream> #include<string> #include<map> #include< ...
- PAT甲级题目翻译+答案 AcWing(并查集)
1013 Battle Over Cities (25 分) 题意 :给图,问去掉所询问的一个点后,需要添加多少条边可以使图连通,N<1000N<1000N<1000 思路 :并查集 ...
- PolandBall and Forest(并查集)
PolandBall lives in a forest with his family. There are some trees in the forest. Trees are undirect ...
- PAT - L1-020. 帅到没朋友(裸并查集)
L1-020. 帅到没朋友 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为 ...
- CodeForces - 755C PolandBall and Forest (并查集)
题意:给定n个数,Ai的下标为1~n.对于每一个i,Ai与i在同一个树上,且是与i最远的点中id最小的点(这个条件变相的说明i与Ai连通).求森林中树的个数. 分析:若i与Ai连通,则在同一个树上,因 ...
- L2-010. 排座位-PAT团体程序设计天梯赛GPLT(并查集)
布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席. 输入格式: ...
最新文章
- iOS 项目集成Flutter
- 达观数据分析平台架构和Hive实践——TODO
- Java并发编程(十三)同步容器类
- proDAD Erazr便携版
- java jdbc dbcp连接SQL Server
- 1001:Hello,World!
- CodeVS 1300 文字排版 线性DP
- matlab qtdecomp,Opencv图像识别从零到精通(25)------区域分裂与合并
- centos 关闭开启防火墙
- 自动生成三层结构代码(2)--生成实体类
- CoreData整理(二)——多线程方案
- luogu P4843 清理雪道
- BZOJ 3531[Sdoi2014]旅行
- BZOJ3828 : [Poi2014]Criminals
- jQuery天猫商品分类导航菜单
- matlab 里%s,matlab中fprintf函数的用法详解-PHP问题
- VC6.0 files---open 出现 MSDEV.exe错误,Project ---- add to project 出现错误等等~~
- excel填充序列_EXCEL工资表制作后导入工资条方法,实现1秒搞定,万人群发
- 计算机课程说课ppt模板,信息技术说课ppt模板
- 安装xDroid一直提示无法执行二进制文件:可执行文件格式错误,怎么办
热门文章
- 【HDU - 1452】 Happy 2004(因子和,逆元,快速幂)
- 动手学PaddlePaddle(5):迁移学习
- vs怎么把textbox输入的实数放置变量里_方程的计算机处理96(3)_C++vs
- html 按钮 按下 状态_第一次按下是启动,第二次按下是停止,俵哥分享2种接线方法...
- java 内部类私有成员 能访问,为什么外部Java类可以访问内部类私有成员?
- mysql外键教程_关于MySQL外键的简单学习教程
- 基于多线程的TCP局域网通信,客户端向服务端上传 文件简单实现源码
- 在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。 * (静态初始化一个数组,在数组中随意写入6个分数) 选手的最后得分为: * 去掉一个最高分和一个最低分后 的4个评委平均值。
- 超经典,百度最爱考的安卓Android百题
- leetcode276. 栅栏涂色