畅通工程 problem c
2016-06-20 08:38
162 查看
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
题目分析:并查集。所需要添加的边数=孤立点数-1.问题转化成使用并查集进行合并操作以后,还剩的孤立点数。
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 1001;
int father[maxn];
void init(){
int i;
for(i = 1 ; i < maxn ; ++i){
father[i] = i;
}
}
int find(int a){
if(a == father[a]){
return a;
}
return father[a] = find(father[a]);
}
void join(int a,int b){
int fa = find(a);
int fb = find(b);
if(fa != fb){
father[fa] = fb;//注意这里不能写成father[a] = b.否则会WA
}
}
int main(){
int n,m;
while(scanf("%d",&n)!=EOF,n){
scanf("%d",&m);
init();
int i;
for(i = 1 ; i <= m ; ++i){
int a,b;
scanf("%d%d",&a,&b);
join(a,b);
}
int cnt = 0;
for(i = 1 ; i <= n ; ++i){//遍历所有点
if(father[i] == i){//求孤立点的个数
cnt++;
}
}
printf("%d\n",cnt-1);//所需要件的边数就是孤立点数-1。
}
return 0;
}
相关文章推荐
- 存储过程中SELECT与SET对变量赋值
- Python 网络编程
- iOS 异步加载图片
- pull解析+httpurlconnection
- leetcode 64. Minimum Path Sum
- cocoa touch——UIPageControl
- python操作mysql数据库
- XListView刷新
- Xcode创建Swift和OC的桥接文件
- C++之IO流
- vim中tab 字符配置
- pull+httpurl
- HttpUrlConnection和Pull解析
- 判断字符串为6~12位“字符”
- 逻辑运算实现位向量
- Python CGI编程
- iOS UIAlertController
- Android开发框架xUtils3.x新手教学(三)使用注解绑定UI、资源和事件
- Hibernate Cascade
- xListView