1118. Birds in Forest (25)——并查集
2018-01-27 00:44
155 查看
https://www.patest.cn/contests/pat-a-practise/1118
吐槽:这是道并查集的题,没有什么好说的,但是可以钻题目的空子还是要钻的,因为鸟的索引是连续的,所以鸟的总数就是其中最大的数,在输入的时候保存下来就行了,最后就是树的组数,主要把并查集构建起来,组数只要记录父节点等于自己本身的点。
吐槽:这是道并查集的题,没有什么好说的,但是可以钻题目的空子还是要钻的,因为鸟的索引是连续的,所以鸟的总数就是其中最大的数,在输入的时候保存下来就行了,最后就是树的组数,主要把并查集构建起来,组数只要记录父节点等于自己本身的点。
#include<cstdio> #include<cstring> #define N 10010 int father ; int find_father(int z){ if(father[z] == z) return z; else{ int tp = find_father(father[z]); father[z] = tp; return tp; } } void Union(int a,int b){ int faA = find_father(a); int faB = find_father(b); if(faA != faB) father[faA] = faB; } int main(){ int n,k,q,x,y,tmp,max=0,id; memset(father,0,sizeof(father)); scanf("%d",&n); for(int i = 0;i < N; i++){ father[i] = i; } while(n--){ scanf("%d%d",&k,&id); if(max < id) max = id; for(int i=0;i<k-1;i++){ scanf("%d",&tmp); Union(id,tmp); if(max < tmp) max=tmp; } } int cnt = 0; for(int i=1;i<=max;i++){ if(father[i] == i) cnt++; } printf("%d %d\n",cnt,max); scanf("%d",&q); for(int i=0;i<q;i++){ scanf("%d%d",&x,&y); if(find_father(x) != find_father(y)) printf("No\n"); else printf("Yes\n"); } return 0; }
相关文章推荐
- 5-25 朋友圈 (并查集)
- PAT 1013. Battle Over Cities (25)(并查集||DFS)
- PAT甲题题解-1114. Family Property (25)-(并查集模板题)
- 1021. Deepest Root (25)【并查集+深搜】——PAT (Advanced Level) Practise
- PAT A 1013. Battle Over Cities (25)【并查集】
- 1114. Family Property (25) 并查集
- 7-22 朋友圈(25 分) (并查集)
- 1079. Total Sales of Supply Chain (25)<BFS,DFS,并查集>
- CF-25D - Roads not only in Berland(并查集或者搜索)
- 1114. Family Property (25)-PAT甲级真题(并查集)
- CF-25D - Roads not only in Berland(并查集或者搜索)
- 7-5 排座位(25 分)(并查集)
- 1118. Birds in Forest (25) 并查集
- PAT题解-1118. Birds in Forest (25)-(并查集模板题)
- 1021. Deepest Root (25) -- 并查集 dfs
- PAT - 甲级 - 1118. Birds in Forest (25) (并查集)
- 04-2. File Transfer (25)并查集
- PAT (Advanced Level)1118. Birds in Forest (25)&&1114. Family Property (25)并查集找爸爸
- PAT 04-2. File Transfer (25) (并查集)
- CodeForces 25D - Roads not only in Berland(并查集题目)