传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5922
题目大意:
n个点的完全图,每条边的权值等于连接这两条边的点的序号的最小公倍数,求最小生成树的权值和。
题目分析:
其实很简单,最小生成树就是把点1和其他点连起来。
反证一下,如果这样连不是最小的,假设存在一条边
<x,y>
在最小生成树里比连接
<1,y>
要优,则有
LCM(x,y)<LCM(1,y)=y
,这明显不可能啊~~
注意一下结果有可能爆int。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
int T;ll n;
scanf("%d",&T);
for(int i=1;i<=T;i++) {
scanf("%I64d",&n);
printf("Case #%d: %I64d\n", i,n*(n+1)/2-1);
}
}
本文探讨了一道经典的图论问题:对于一个n个点的完全图,每条边的权值等于连接两点的序号的最小公倍数,求最小生成树的权值和。文章给出了解决方案,并证明了最优解即为将所有点直接连接到点1上。
516

被折叠的 条评论
为什么被折叠?



