zcmu——4940: 暢通工程(並查集)
阿新 • • 發佈:2018-12-09
【分析】
模板之前都會
就是不會實際應用
還是題目做的太少了
這種題
至少要修幾條路
就是找有幾個連通分量
結果就是連通分量-1
還有如何把路的兩邊連在一起
其實就是用union模板
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> using namespace std; #define maxn 1010 int father[maxn]; void initial(int n) { for(int i=1;i<=n;i++) { father[i]=i; } } int findFather(int x) { while(x!=father[x]) x=father[x]; return x; } void Union(int a,int b) { int faA=findFather(a); int faB=findFather(b); if(faA!=faB) father[faA]=faB; } int main() { int m,n,x,y; while(~scanf("%d",&n)&&n!=0) { //scanf("%d",&m); initial(n); cin>>m; for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); Union(x,y); } int cnt=0; for(int i=1;i<=n;i++) { if(father[i]==i) cnt++; } printf("%d\n",cnt-1); } return 0; }