码迷,mamicode.com
首页 > 其他好文 > 详细

Rikka with Graph hdu 6090

时间:2017-08-08 21:52:01      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:大于   nbsp   最大值   size   ott   c代码   htm   cstring   limit   

题解:考虑贪心地一条一条边添加进去。

 

当 m \leq n-1mn?1 时,我们需要最小化距离为 nn 的点对数,所以肯定是连出一个大小为 m+1m+1 的联通块,剩下的点都是孤立点。在这个联通块中,为了最小化内部的距离和,肯定是连成一个菊花的形状,即一个点和剩下所有点直接相邻。

当 m > n-1m>n?1 时,肯定先用最开始 n-1n?1 条边连成一个菊花,这时任意两点之间距离的最大值是 22。因此剩下的每一条边唯一的作用就是将一对点的距离缩减为 11。

这样我们就能知道了最终图的形状了,稍加计算就能得到答案。要注意 mm 有可能大于 \frac{n(n-1)}{2}?2??n(n?1)??

 

队友给力,手速快,赛后补代码都补了20多分钟,,, 果然自己代码实现能力还是弱渣。

AC代码:

#include <cstdio>
#include <cstring>
#include <queue>
#include <iostream>
using namespace std;
typedef long long ll;
ll get(ll n)
{
    ll temp=n-1ll;
    temp+=(n-1ll)*((2ll)*n-3ll);
    return temp;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll n,m;
        scanf("%lld %lld",&n,&m);
        ll ans=0;
        m=min(m,(n-1ll)*n/2ll);
        if(m <= n-1)
        {
            ans+=get(m+1);
            ll temp=n-m-1;
            ans+=temp*(m+1)*n*2;
            ans+=(temp-1ll)*temp*n;
            cout<<ans<<endl;
        }
        else
        {
            ll temp=get(n)-(m-(n-1))*2;
            cout<<temp<<endl;
        }
    }
    return 0;
}

 

Rikka with Graph hdu 6090

标签:大于   nbsp   最大值   size   ott   c代码   htm   cstring   limit   

原文地址:http://www.cnblogs.com/z1141000271/p/7308816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!