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;
}
思路:并查集的问题,非常典型。
感想:半个月前开的这套题,然后上周才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;
}
相关文章推荐
- 【ImageView】android中src和background区别
- 开发者所需要知道的 iOS 10 SDK 新特性
- 【10】矩形覆盖
- Java Web基础
- Arduino SIM900 AT+CGATT=1 出错
- [leetcode] 347. Top K Frequent Elements
- JAVA Hibernate工作原理及为什么要用
- IMAP常用命令汇总
- 编写测试用例
- VS2010 学习版序列号
- Android自定义View绘制彩色圆弧
- 15.5节练习
- mysql-connector-odbc-5.3.6 安装 错误 Error 1918
- Android上从相册选择后剪裁图片
- Result Maps collection does not contain value for frontpreviewprofitManage.cdata
- zabbix手机报警,zabbix短信报警
- Ubuntu免sudo使用Docker
- 查看linux下Apache访问者数量
- PowerDesigner提示This data item is already used in a primary identifier.的处理
- 文章标题