hdu 6090 Rikka with Graph [想法题]

来源:互联网 发布:办公软件培训多少钱 编辑:程序博客网 时间:2024/06/07 03:41

题意:给你n个节点,要求建立不超过m条变的图,使得

最小

题解:我们可以选择节点1为根节点,将其他的点连接到这个点上,然后对于还多出来的边,我们可以对非根节点之间连边,每一次连边将减少2的距离。

AC代码:

#include<queue>#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;int main(){    int t;    scanf("%d",&t);    while(t--){        ll n,m,ans=0;        scanf("%lld%lld",&n,&m);        if(m<=n-1){            ans=2*m;            ans+=m*(m-1)*2;            ans+=2*(m+1)*(n-m-1)*n;            ans+=(n-m-1)*(n-m-2)*n;        }        else {            ans=2*(n-1);            ans+=(n-1)*(n-2)*2;            ll de;            de=min(m-(n-1),(n-1)*(n-2)/2);            ans-=de*2;        }        printf("%lld\n",ans);    }    return 0;}