简单题意
使任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
解题思路形成过程
最简单的不带权值考虑问题,老师上课讲的典型并查集问题,首先单独建立集合,把已经建立联系的村庄放到一个集合中去,最后只要找没被改过集合的数量就行了
感想
思想还是很模糊,接下来老师没讲的带权值的怎么做啊。。
AC代码
#include <iostream>
#include <stdio.h>
#include <fstream>
using namespace std;
int bin[1002];
int findx(int x){
int r=x;
while(bin[r]!=r){
r=bin[r];
}
return r;
}
void merge(int x,int y)
{
int fx,fy;
fx=findx(x);
fy=findx(y);
if(fx!=fy)
bin[fx]=fy;
}
int main(){
ifstream cin("in.txt");
freopen("in.txt","r",stdin);
int n,m,x,y;
while(cin>>n&&n){
for(int i=1;i<=n;i++)
bin[i]=i;
for(cin>>m;m>0;m--){
cin>>x>>y;
merge(x,y);
}
int count=-1;
for(int i=1;i<=n;i++)
if(bin[i]==i)
count++;
cout<<count<<endl;
}
}