1.题目编号
1003
2.简单题意
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
3.解题思路
并查集的应用,求图的连通分量,然后用总数减去连通分量的个数即是结果。
4.感想
课上老师讲的例题,最早做的题,是按照老师ppt上的内容做的。
5.代码
#include<iostream>
#include<stdio.h>
int a[1002];
int findx(int x)
{
int r=x;
while(a[r]!=r)
r=a[r];
return r;
}
void merge(int x,int y)
{
int fx,fy;
fx = findx(x);
fy = findx(y);
if(fx != fy)
a[fx]=fy;
}
int main()
{
int n,m,i,x,y,count;
while(scanf("%d",&n),n)
{
for(i=1;i<=n;i++)
a[i] = i;
for(scanf("%d",&m);m>0;m--)
{
scanf("%d %d",&x,&y);
merge(x,y);
}
for(count=-1, i=1;i<=n;i++)
if(a[i]==i)
count++;
printf("%d\n",count);
}
}