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;
}