zoukankan      html  css  js  c++  java
  • HDU 6090 Rikka with Graph 思维 公式

      题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6090

      题目描述: 有n个点, 你可以连m条边, 使得ni=1nj=1dist(i,j).最小, 不连通的两个点dis为n

      解题思路: 推公式.....其他的不难推, 边小于n-1最难推.........已知m == n-1结果是2 * (n-1)*(n-1), 可以看做去掉一条边就加上若干个(n-1)和(n-2), 然后得出大长串儿......

      代码: 

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    typedef long long ll;
    ll n, m;
    
    int main() {
        int T;
        scanf( "%d", &T );
        while( T-- ) {
            cin >> n >> m;
            if( m < n - 1 ) {
                cout << 2*(n-1)*(n-1)+2*(m)*(n-1-m)*(n-2)+2*(n-1-m)*(n-1)+(n-1-m)*(n-m-2)*(n-2) << endl;
                continue;
            }
            else if( m == n - 1 ) {
                cout << 2*(n-1)*(n-1) << endl;
                continue;
            }
            else if( m > n - 1 && m < n * (n - 1) / 2 ) {
                cout << 2*(n-1)*(n-1)-2*(m-n+1) << endl;
                continue;
            }
            else cout << n*(n-1) << endl;
        }
        return 0;
    }
    View Code

      思考: 扣半天才抠出来.....之前自己有个地方少考虑了.....结果.......

  • 相关阅读:
    springboot模板
    springboot入门
    java自定义注解
    git集成idea
    git的搭建和使用
    Shiro授权
    shiro认证
    shiro入门
    springmvc文件上传
    springmvc入门
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/7308641.html
Copyright © 2011-2022 走看看