【题目链接】
http://acm.hdu.edu.cn/showproblem.php?pid=6090
题目意思
在一个无向图中,给你n个点和m条边。每个点到其他点权重为所走过的边的个数,无法到达的点权重为n。问你全部权重总和。
解题思路
当m=n-1时,正好将可以n点全部链接。而要使权值最小也就是选个中心点其他点都先与中心点相连。总权重等于(n-1)*(n-1)*2
当m>n-1时把除中心点其他任意两点相连,每相连一条总权重减少2。(m=min(n*(n-1)/2,m)
最多连n*(n-1)/2
条边)
当m
代码部分
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
int t;
scanf("%d",&t);
while (t--)
{
ll m,n,ans=0;
scanf("%lld %lld",&n,&m);
if (m>n*(n-1)/2)
m=n*(n-1)/2;
if (m<n-1)
{
ll red=(n-m-1)*n*(n+m);
ans=m*m*2+red;
}
else
{
ans=(n-1)*(n-1)*2-(m-n+1)*2;
}
printf("%lld\n",ans);
}
return 0;
}