您的位置:首页 > 其它

Problem-C

2016-06-23 11:30 288 查看
概述:某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? 

思路:并查集的问题,非常典型。

感想:半个月前开的这套题,然后上周才a的,今天才来写这个博客,有点晚。。#include<iostream>

using namespace std;

int a[1002];
int findx(int x)
{
int b=x;
while(a[b]!=b)
b=a[b];
return b;
}
void merger(int x,int y)
{
int fx,fy;
fx = findx(x);
fy = findx(y);
if(fx != fy)
a[fx] = fy;
}

int main()
{
int N,M,x,y,count;
while(cin>>N&&N)
{
count=-1;
cin>>M;
for(int i=1;i<=N;i++)
a[i]=i;
for(int i=M;i>0;i--)
{
cin>>x>>y;
merger(x,y);
}
for(int i=1;i<=N;i++)
if(a[i]==i)
count++;
cout<<count<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: