题目描述:
题目链接: UESTC 762 铁路
题目大意: 有n座城市,每种城市至多只能和其它城市中的k座之间直接修建一条铁路。问至多能建设多少条铁路?注意,两个城市间直接铺设多条铁路是不合法的。如果无论怎么修建都不能连通所有城市,则输出0。
Input
输入包含多组测试数据。第一行是一个整数T(T≤1000),表示测试组数。随后有T行,每行有两个整数n, k(1≤n≤10000,0≤k≤10000)分别表示,E国城市的数目和每个城市最多能直接相连的城市个数。
Output
对于每组输入数据,输出包含所求数目的一行。
Samples Input
2
5 3
5 0
Samples Output
7
0
题目分析:
这道题其实很简单,但写的原因是为了提醒自己要思维周密。这道题连WA了三次,我才把所有情况考虑到。简单题也不能掉以轻心,也要多思考一下特殊情况。
对于一般情况,答案当然是nk/2,可以看作每座城市可连接k次,那总共可连接nk次,而修一条铁路会连接两个城市,消耗两次,所以除以2。
特殊情况1:当n=1或k<=1时,不能修建铁路或不能连通所有城市,结果为0,但其中n=2,k=1时结果为1。
特殊情况2:当k>n-1时,因为题目要求了两座城市之间不能铺设多条铁路,所以一座城市最多修建n-1条铁路来与其他城市相连。此时便不能直接用k来计算。
附代码:
#include<iostream>
using namespace std;
int T,n,k,ans;
int main()
{
//freopen("lx.in","r",stdin);
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
if(n==1||k<=1)
{
if(n==2&&k==1) printf("1\n");
else printf("0\n");
}
else
{
if(k>n-1) k=n-1;
ans=n*k/2;
printf("%d\n",ans);
}
}
return 0;
}