* http://acm.hdu.edu.cn/showproblem.php?pid=1232 HDU 1232 这题要用到的算法是并查集 将能够连接的城镇看成是一个集合 然后统计出所有集合的个数 */ #include<iostream> using namespace std; int c,n,m,pre[10000],i,x,y,k,s; int find(int c) //寻找结点 { while(pre[c]!=c) c=pre[c]; return c; } void merge(int k,int s) //合并集合 { int fk,fs; fk=find(k); fs=find(s); if(fk!=fs) pre[fk]=fs; } int main() { int p; while(cin>>n>>m) { if(n==0) break; for(i=1;i<=n;i++) { pre[i]=i; } for(i=1;i<=m;i++) { cin>>x>>y; merge(x,y); } p=0; for(i=1;i<=n;i++) { if(pre[i]==i) p++; } cout<<(p-1)<<endl; } return 0; }
hdu1232畅通工程
最新推荐文章于 2020-02-04 11:17:35 发布