[UESTC 762] 铁路

题目描述
题目链接 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;
}
发布了99 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qianguch/article/details/105224821
今日推荐