hdu1232---畅通工程
Posted sumaywlx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1232---畅通工程相关的知识,希望对你有一定的参考价值。
tips:
1.并查集裸题,用isroot数组记录有几个根节点。
3.改变isroot数组类型可以统计一个集合中元素的个数。----isroot[finddad(i)]++;
2.hdu1272--isroot数组出bug了。
#include<bits/stdc++.h> using namespace std; const int M=1010; int father[M]; int isroot[M]; int n,m; int a,b; void init(){ for(int i=1;i<=n;i++){ father[i]=i; isroot[i]=0; } } int finddad(int x){ if(x == father[x]) return x; else return father[x]=finddad(father[x]); } void unionn (int x, int y){ int fx=finddad(father[x]); int fy=finddad(father[y]); if(fx != fy) father[fx]=fy; } int main(){ while(cin>>n>>m){ if(n == 0) break; if(m==0) { cout<<n-1<<endl; continue; } init(); for(int i=0;i<m;i++){ cin>>a>>b; unionn(a,b); } for(int i=1;i<=n;i++){ int x=finddad(i); isroot[x]=1; } int ans=0; for(int i=1;i<=n;i++){ ans+=isroot[i]; } cout<<ans-1<<endl; } return 0; }
以上是关于hdu1232---畅通工程的主要内容,如果未能解决你的问题,请参考以下文章