hdu6090 Rikka with Graph

来源:互联网 发布:童年电视剧主题曲 知乎 编辑:程序博客网 时间:2024/06/04 08:59

                                                     题 目 传 送 门

题意:给定n个点,m条边,让你安排点和边构成一个无向图。dis(i,j),表示i到j最小的边数,如果无法到达,dis(i,j)为n,问每个点到其他所有的点的dis之和。


思路:简单的贪心策略问题,有两种情况

1.



当m>n-1(连通)的时候2*m个dis(i,j)为1,其余为2

2.


当m<n-1(不联通)的时候可分为两部分

(1)m+1个点是联通的和1一样

(2)n-(m+1)个点独立存在,到其他点全是n


ac代码:

#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>using namespace std;int main(){    int t;    cin>>t;    while(t--)    {       long long sum;       long long a,b;       cin>>a>>b;       if(b>=a*a-a)       {           cout<<a*a-a<<endl;           continue;       }       if(b>=a-1)       sum=(a*a-a-(long long)2*b)*(long long)2+(long long)2*b;       else       sum=(long long)2*b+b*(b-1)*(long long)2+(a*a-a-(long long)2*b-b*(b-1))*a;       cout<<sum<<endl;    }    return 0;}