Problem Description

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

Input

测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。
注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。

Output

对每个测试用例,在1行里输出最少还需要建设的道路数目。

Sample Input

4 2
1 3
4 3
3 3
1 2
1 3
2 3
5 2
1 2
3 5
999 0
0

Sample Output

1
0
2
998

Hint

Hint Huge input, scanf is recommended.

Source

浙大计算机研究生复试上机考试-2005年

Recommend

JGShining

又是一道最小生成树的裸题

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<iomanip>
#define INF 0x7ffffff
#define MAXN 1100
using namespace std;
const double eps=1e-;
const double PI=acos(-);
const int MAXN2=;//
int G[MAXN][MAXN];
int s[MAXN];
int n,m;
struct edge
{
int x;
int y;
}e[MAXN2];
int f(int x)
{
if(x==s[x])
return x;
s[x]=f(s[x]);
return s[x];
}
int merg(int a,int b)
{
int x=f(a),y=f(b);
if(x!=y){
s[x]=y;
return ;
}
return ;
}
void init()
{
for(int i=;i<=n;i++){
s[i]=i;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
#endif
std::ios::sync_with_stdio(false);
std::cin.tie();
//并查集
int a,b;
int res;
while(cin>>n){
init();
if(n==)
continue;
cin>>m;
struct edge tmp;
for(int i=;i<m;i++){
cin>>a>>b;
merg(a,b);
}
res=;
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
if(!merg(i,j)){
res++;
}
}
}
cout<<res<<endl;
}
}

最新文章

  1. ubuntu如何傻瓜式安装eric6
  2. iOS - Mac OS X 终端设置
  3. API接口验证
  4. SuperGridControl 使用小技巧
  5. Mongodb学习教程汇总
  6. ld: symbol dyld_stub_binding_helper not found, normally in crt1.o/dylib1.o/bundle1.o for architecture i386
  7. C++ 进阶必备
  8. 每天进步一点点——Linux系统时间来处理
  9. KEILC51可重入函数及模拟栈浅析
  10. sql语句查询列的说明
  11. Https系列之四:https的SSL证书在Android端基于okhttp,Retrofit的使用
  12. 华为云照片的爬虫程序更新(python3.6)
  13. Java进阶篇(二)——抽象类、内部类
  14. idea的一般使用和初始配置
  15. vue.js学习第一天,了解vue.js
  16. EXTJS4扩展实例:如何使用filter查询treepanel
  17. java调用.net的webservice
  18. js es6 map 与 原生对象区别
  19. TCP三次握手,什么情况下client会回复reset
  20. SP34096 【DIVCNTK - Counting Divisors (general)】

热门文章

  1. python学习入门第一天总结
  2. iOS之多线程NSOperation
  3. 【Loadrunner】初学Loadrunner——录制脚本、回放、以及优化
  4. 判断一个值是不是DBNull.Value
  5. 在OSchina上看到的清理到缓存的方法
  6. git 常用使用及问题记录
  7. 你需要简单了解JVM中的内存长什么样子
  8. select 1 from table
  9. java写文件时,输出不完整的原因以及解决方法close()或flush()
  10. MT4 做指标模版