畅通工程,How Many Tables ACM第九天-图论
下面两题的方法是一样的都是并查集的应用;
并查集的重点就是找到祖先节点的过程。
重点在这里:int find(int x){ return p[x] == x ? x : p[x] = find( p[x]); }
不断地递归,递归到找到自己是自己的祖先为止。并且把它取接到那个祖先节点上;这样可以节省空间和时间。
How Many Tables
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 15414 Accepted Submission(s): 7560
One important rule for this problem is that if I tell you A knows B, and B knows C, that means A, B, C know each other, so they can stay in one table.
For example: If I tell you A knows B, B knows C, and D knows E, so A, B, C can stay in one table, and D, E have to stay in the other one. So Ignatius needs 2 tables at least.
#include <cstdio>
#define maxn 1005
using namespace std;
int p[maxn];
int a[maxn];
int b[maxn];
int find(int x){return p[x] == x? x : p[x] = find(p[x]);
}
int main(){int t;scanf("%d",&t);while(t--){int n,m;scanf("%d %d",&n,&m);for(int i = 1;i <= m;i++){scanf("%d %d",&a[i],&b[i]);}int ans = 0;for(int i = 1;i <= n;i++){p[i] = i;}for(int i = 0;i <= m;i++){int x = find(a[i]);int y = find(b[i]);if(x != y){ans++;p[x] = y;}}int answer = n - ans;printf("%d\n",answer);}return 0;
}
【比赛提醒】BestCoder 你报名了吗?(点击报名)
【科普】什么是BestCoder?如何参加? |
畅通工程Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
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 <cstdio>
#include <cstring>using namespace std;
#define maxn 1005
int p[maxn];
int a[maxn];
int b[maxn];
int find(int x){return p[x] == x? x : p[x] = find(p[x]);
}
int main(){int n,m;while(scanf("%d %d",&n,&m) && n){memset(p,0,sizeof(p));for(int i = 1;i <= m;i++){scanf("%d %d",&a[i],&b[i]);}int ans = 0;for(int i = 1;i <= n;i++){p[i] = i;}for(int i = 0;i <= m;i++){int x = find(a[i]);int y = find(b[i]);if(x != y){ans++;p[x] = y;}}int answer = n - 1 - ans;printf("%d\n",answer);}return 0;
}
转载于:https://www.cnblogs.com/lccurious/p/5079882.html
畅通工程,How Many Tables ACM第九天-图论相关推荐
- HDOJ 1874 HDU 1874 畅通工程续 ACM 1874 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1874 ...
- HDOJ 1875 HDU 1875 畅通工程再续 ACM 1875 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1875 ...
- ACM: 畅通工程-并查集-解题报告
畅通工程 Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description某省调查城镇交通状况, ...
- [ACM] hdu 1232 畅通工程(并查集)
Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...
- HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)
畅通工程续 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修 ...
- 并查集——畅通工程(hdu1232)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1232 题目描述: 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省 ...
- 还是畅通工程1233
/* 杭电2011和2012级同学如何加入ACM集训队? 微软招聘信息(主要针对已经有工作经验的) 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) M ...
- [HDOJ1897]继续畅通工程
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1879 继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...
最新文章
- 【转】Android source build/envsetup.sh学习笔记
- linux 命令详解 十一
- php 模板使用,TMDPHP 模板引擎使用教程
- 关于合成的拷贝控制成员的一点问题
- BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
- [vim] vim中使用cscope的安装与使用
- HTTP GET/CONNECT代理区别
- 猜数游戏软件的设计开发系统测试参考
- Java常见面试题:对象的访问定位的两种方式
- docunment对象
- CDKEY制作:为什么会有CDKEY产生机这样的破解工具?
- 旧版sai笔刷_sai2笔刷素材包
- js将html替换字符串,js 替换字符串指定内容 javascript 替换指定位置的字符
- 文件误删除如何找回呢?四步妙招解决
- 计算机ctrl加什么作用,计算机中快捷键ctrl加什么是返回上一步
- 【思维导图】算法设计与分析
- Codeforces 897D. Ithea Plays With Chtholly (交互)
- KY122 找出直系亲属
- 常用的js代码以及自动在线生成JavaScript工具地址
- coursera python_如何最高效且自由地收看Coursera
热门文章
- 【mybatis mapper XML】自增主键
- 双链表java实现_双链表 Java实现数据结构
- mysql实验总结范文_数据库课程设计实验报告范例1
- cocos2d 屏幕適配_cocos2d-x 2.x屏幕适配基础
- linux db2 强制停止,DB2强制退出ROLLBACK状态
- Linux环境下配置Tomat
- 判断字符为空_49. 把字符串转换成整数(剑指offer)
- 突发!吴恩达确诊新冠,46岁生日还有不到3个月
- Pycharm SSH 容器中的python环境
- 彻底搞清楚MySQL分库、分表、分区的区别