UESTC 1903 铁路
来源:互联网 发布:乌龙茶品牌推荐 知乎 编辑:程序博客网 时间:2024/06/10 06:05
铁路
Time Limit: 1000 ms Memory Limit: 65535 kB
Description
很久很久以前,E国遭遇了一次巨大的冲击。E国的铁路运输网已经完全崩溃。但是伟大的列车托夫出现了,他领导着E国人重新开始修铁路。为了生产资料的运输,我们希望任意的两个城市都能够经由铁路直接或间接连通。
但是E国的城市修建的十分奇异,以至于每个城市至多只能和其它城市中的k座之间直接修建一条铁路。现在,E国有n个城市,那么最多能在E国建设多少条铁路?这里,认为在两个城市间直接铺设多条铁路是不合法的。如果无论怎么修建都不能连通所有城市,则输出0。
Input
输入包含多组测试数据。第一行是一个整数T (T <= 1000),表示测试组数。随后有T行,每行有两个整数n, k(1<=n<=10000, 0<=k<=10000)分别表示,E国城市的数目和每个城市最多能直接相连的城市个数。
Output
对于每组输入数据,输出包含所求数目的一行。
Sample Input
2
5 3
5 0
Sample Output
7
0
解题思路:
把城市数目n当做为点数,n*k为总点数,则每条铁路消耗两个点数;
总共可以建n*k/2条铁路;
不过,当k大于n-1时达到最大值max=n*(n-1)/2;
然后,再处理下特殊情况就OK了!
#include"stdio.h" #include"string.h" #include"stdlib.h" int main() { int n,k,T; scanf("%d",&T); while(T--) { int cnt; scanf("%d%d",&n,&k); if(k==0||n==1) //此种情况无法修建铁路 cnt=0; else if(k==1) { if(n==2) //恰好一条铁路 cnt=1; else //城市数目大于2无法联通所有城市 cnt=0; } else { if(k>=n-1) //城市间铁路数目已经饱和 cnt=n*(n-1)/2; else cnt=k*n/2; //注意奇偶性,n/2*k会wrong answer! } printf("%d\n",cnt); } return 0; }
0 0
- UESTC 1903 铁路
- uestc 1903
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- UESTC
- 清除svn信息
- C++反汇编学习笔记6——变量在内存中的位置和访问方式
- NYOJ 2 括号配对问题
- jsp mvc设计模式的登陆注册
- goagent登录不上sites.google.com的解决方案
- UESTC 1903 铁路
- 第17周项目1.2(传地址值方法)
- NYOJ 5 Binary String Matching
- Linux下压缩
- 阿森纳的这一赛季
- confidence weighted learning
- 关闭vb6.0 时报内存不能为read 错误解决方法
- C语言容易出错的地方
- python中的排序问题——多属性排序