(模板題)暢通工程
阿新 • • 發佈:2018-11-25
問題描述:
有n個點,有m個連線關係,求最少需要再建立的線段條數;
#include<iostream> using namespace std; const int maxn=1010; int n,m,cnt,p,q; int maze[maxn]; void init() { for(int i=0;i<maxn;i++) maze[i]=i; } int my_find(int x) { return x==maze[x]? x : my_find(maze[x]); } void my_union(int i,int j) { int x=my_find(i); int y=my_find(j); if(x!=y) { maze[x]=y; cnt--; } } int main() { while(cin>>n,n)//注意n和m的輸入方式,題目要求是n=0時就代表輸入結束,沒說m { cin>>m; init(); cnt=n-1;//連線n個點,在不成環的情況下需要n-1條線段; for(int i=0;i<m;i++) { cin>>p>>q; my_union(p,q); } cout<<cnt<<endl; } return 0; }
並查集