HDU 6090 Rikka with Graph 思维 公式
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6090
题目描述: 有n个点, 你可以连m条边, 使得∑ni=1∑nj=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; }
思考: 扣半天才抠出来.....之前自己有个地方少考虑了.....结果.......
posted on 2017-08-08 19:44 FriskyPuppy 阅读(203) 评论(0) 编辑 收藏 举报