PAT题解-1118. Birds in Forest (25)-(并查集模板题)
2016-12-04 21:08
447 查看
如题。。。
View Code
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h> using namespace std; /* 并查集水题 */ const int maxn=10000+5; struct UF{ int father[maxn]; void init(){ for(int i=0;i<maxn;i++) father[i]=i; } int find_root(int x){ if(father[x]!=x){ father[x]=find_root(father[x]); } return father[x]; } void Union(int x,int y){ int fx=find_root(x); int fy=find_root(y); if(fx!=fy){ father[fy]=fx; } } }uf; int main() { int n,q; int k,a,b; int vis[maxn]; uf.init(); memset(vis,0,sizeof(vis)); scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d %d",&k,&a); vis[a]=1; for(int j=1;j<k;j++){ scanf("%d",&b); vis[b]=1; uf.Union(a,b); a=b; } } int flag[maxn]; memset(flag,0,sizeof(flag)); int cnt=0; for(int i=0;i<maxn;i++){ if(vis[i]){ cnt++; int fa=uf.find_root(i); flag[fa]=1; } } int tree=0; for(int i=0;i<maxn;i++){ tree+=flag[i]; } printf("%d %d\n",tree,cnt); scanf("%d",&q); for(int i=0;i<q;i++){ scanf("%d %d",&a,&b); int fa=uf.find_root(a); int fb=uf.find_root(b); if(fa==fb) printf("Yes\n"); else printf("No\n"); } return 0; }
View Code
相关文章推荐
- PAT甲题题解-1114. Family Property (25)-(并查集模板题)
- 1118. Birds in Forest (25)-PAT甲级真题(并查集)
- PAT 1118. Birds in Forest (25) 并查集
- 1114. Family Property (25)(PAT 并查集)
- PAT 04-2. File Transfer (25) (并查集)
- PAT 1013. Battle Over Cities (25)(并查集||DFS)
- PAT (Advanced Level)1118. Birds in Forest (25)&&1114. Family Property (25)并查集找爸爸
- 1021. Deepest Root (25)【并查集+深搜】——PAT (Advanced Level) Practise
- PAT - 甲级 - 1118. Birds in Forest (25) (并查集)
- PAT - 甲级 - 1114. Family Property (25) (并查集)
- PAT (Advanced Level) 1013. Battle Over Cities (25) 并查集
- pat 1118. Birds in Forest (25) 并查集
- 1114. Family Property (25)-PAT甲级真题(并查集)
- 【并查集】PAT 家庭房产(25 分)
- PAT甲级 1102. Invert a Binary Tree (25)
- PAT(甲)1003. Emergency(25)
- 1005. 继续(3n+1)猜想 (25) (ZJUPAT 数学)
- 【PAT甲级】1047. Student List for Course (25)
- 浙大 PAT Advanced level 1029. Median (25)
- PAT(A) 1003. Emergency (25)