1. 程式人生 > 其它 >2021“MINIEYE杯”中國大學生演算法設計超級聯賽(1)1005 Minimum spanning tree

2021“MINIEYE杯”中國大學生演算法設計超級聯賽(1)1005 Minimum spanning tree

https://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1005&cid=984

題意:

n-1個點,編號為2到n,a和b之間的邊權為lcm(a,b),求最小生成樹

首先從點i連出去的邊權必然大於等於點i

合數向他的因子連邊,邊權為本身是最優的

質數向2連,邊權為2倍的本身

所以最終答案 = 3到n的數的和+3到n的質數和

#include<bits/stdc++.h>

using namespace std;

#define N 10000001

bool vis[N];
int p[N/10],m;
long long sp[N/10
]; void pre() { for(int i=2;i<N;++i) { if(!vis[i]) { p[++m]=i; sp[m]=sp[m-1]+p[m]; } for(int j=1;j<=m && p[j]*i<N;++j) { vis[p[j]*i]=true; if(!(i%p[j])) break; } } } int main() { pre();
int T,n,b,pos; long long ans; scanf("%d",&T); while(T--) { scanf("%d",&n); ans=1ll*(3+n)*(n-3+1)/2; pos=upper_bound(p+1,p+m+1,n)-p; ans+=sp[pos-1]-2; printf("%lld\n",ans); } }
作者:xxy 出處:http://www.cnblogs.com/TheRoadToTheGold/ 本文版權歸作者和部落格園共有,轉載請用連結,請勿原文轉載,Thanks♪(・ω・)ノ。