SDUT2506完美网络
来源:互联网 发布:替代 usleep windows 编辑:程序博客网 时间:2024/06/11 00:43
完美网络
Time Limit: 1000MS Memory limit: 65536K
题目描述
完美网络是连通网络的基础上要求去掉网络上任意一条线路,网络仍然是连通网络。求一个连通网络要至少增加多少条边可以成为完美网络。
输入
第一行输入一个数T代表测试数据个数(T<=20)。每个测试数据第一行2个数n,m 分别代表网络基站数和基站间线路数。基站的序号为从1到n。接下来m行两个数代表x,y 代表基站x,y间有一条线路。
(0 < n < m < 10000)
输出
对于每个样例输出最少增加多少线路可以成为完美网络。每行输出一个结果。
示例输入
23 11 23 21 22 3
示例输出
21
提示
主要内容是将所有度小于2的节点单独连起来,不断循环这个过程,循环几次就是需要接多少线;
来源
中国海洋大学第三届“朗讯杯”编程比赛高级组试题
示例程序
#include <stdio.h>#include <queue>#include <string.h>#include <algorithm>using namespace std;int map[10000];int main(){ int T,n,m,v,u,i,s,a,b; scanf("%d",&T); while(T--) { priority_queue<int >p;///优先队列: memset(map,0,sizeof(map)); scanf("%d%d",&n,&m); for(i=1;i<=m;i++) { scanf("%d%d",&u,&v); map[u]++; map[v]++; } sort(map+1,map+n+1); for(i=1;i<=n;i++)///因为sort已经将map排好序了,找到第一个不小于2的,后边都不小2了; { if(map[i]<2) p.push(map[i]);///进队列,需要加边; else break; } s=0;///记录需要加的边数 while(p.size()>=2)///保证队列里有两个元素; { int a=p.top(); p.pop(); int b=p.top(); p.pop(); a++; b++;///a,b相连; s++; if(a<2) p.push(a); if(b<2) p.push(b); } if(p.empty()!=1) s++; printf("%d\n",s); } return 0;}
0 0
- SDUT2506完美网络
- SDUT2506完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- 完美网络
- window.onload和$(document).ready()的区别
- STL的vector<string>的初始化方式总结
- hbase常用shell整理,不定期更新
- Live Archive 3029 City Game
- stm32启动文件
- SDUT2506完美网络
- 1111
- POJ 2299 Ultra-QuickSort [树状数组做法]
- 杭电 1166 敌兵布阵 (线段树)
- ReactNative之TextInput
- refresh的停车场
- How to fix a "Duplicated Symbols" error on binary files
- CSUOJ 1116 Kingdoms
- iOS APP性能优化