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
原创粉丝点击