jzoj5888
tj:暴力連邊會tle
我們發現所有邊的邊權最大值不超過100000,這意味著可以設計和邊權有關的算法,假設現在邊權不相同
枚舉一個現在的邊權i,代表gcd為i,設連的2個點權值為a1∗ia1*ia1∗i和a2∗ia2*ia2∗i,當且僅當a1與a2互質時,gcd值為i
這樣子可以將a1∗ia1*ia1∗i和a2∗ia2*ia2∗i連起來,但是還是太慢
我們可以考慮將所有邊由i連向2∗i2*i2∗i,3∗i3*i3∗i…,得到的新圖與原圖等價
因為我們這一輪只能在2∗i2*i2∗i,3∗i3*i3∗i…中連邊,而以前我們只會連接a1與a2互質的邊,由於i的前面一項為1,與2,3,…互質,所以之前連的邊現在還會連,並且會使iii,2∗i2*i2∗i,3∗i3*i3∗i…聯通
這樣子我們得到了一個邊數為(max(a[i])lnmax(a[i]))(max(a[i])lnmax(a[i]))(max(a[i])lnmax(a[i]))的新圖。貪心連邊,從max(a[i])循環至1即可
注意,我們需要判權值相等的點,這些點沒有考慮到,需要全部加上這些點的權值
代碼:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a[2000010],p[2000010],mn,bk[2000010];
ll find(ll x){return p[x]==x?x:p[x]=find(p[x]);}
int main(){
freopen("gcd.in","r",stdin);
freopen("gcd.out","w",stdout);
scanf("%lld",&n);
ll ans=0;
for(ll i=1;i<=n;i++){
p[i]=i;
scanf("%lld",&a[i]);
if(!bk[a[i]])bk[a[i]]=i;
else ans+=a[i];
mn=max(mn,a[i]);
}
for(ll i=mn;i>=1;i--){
ll las=0;
for(ll j=1;j*i<=mn;j++)if(bk[j*i]){
ll xx=find(bk[j*i]);
if(!las)las=xx;
else{
if(las==xx)continue;
ans+=i;
p[xx]=las;
}
}
}
printf("%lld\n",ans);
}
jzoj5888的更多相关文章
- [JZOJ5888]GCD生成树
[JZOJ5888]GCD生成树 题目链接 gugugu 分析 对于N很小的情况,暴力Prim即可 对于值域很小的情况,我的想法与solution不太一样,将值相同的缩成一个点,\(O(w^2)\)预 ...
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
随机推荐
- Bad Hair Day
/* Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-c ...
- laravel中的old()函数
1.控制器 2.模板
- gdb 调试带参数程序
在gdb中,运行程序使用r或是run命令. 程序的运行,你有可能需要设置下面四方面的事. 1.程序运行参数. set args 可指定运行时参数.(如:set args 10 20 30 40 50) ...
- 5条面经,助你成功拿到UX设计师Offer
为什么成为 UX设计师? 如果你经常逛推酷, 知乎, 设计达人或者一些专业的设计师论坛,博客,你会发现,第一批成为UX设计师的人,其实是误打误撞地落入这个行业的.那时候人们并不清楚UX设计师是什么 ...
- servlet 中 service ,doGet , doPost 关系
web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...
- C++11新特性——The C++ standard library, 2nd Edition 笔记(一)
前言 这是我阅读<The C++ standard library, 2nd Edition>所做读书笔记的第一篇.这个系列基本上会以一章一篇的节奏来写,少数以C++03为主的章节会和其它 ...
- 2018.07.06 POJ2536 Gopher II(二分图匹配)
Gopher II Time Limit: 2000MS Memory Limit: 65536K Description The gopher family, having averted the ...
- Django入门指南-第9章:静态文件设置(完结)
http://127.0.0.1:8000 #下一步是告诉Django在哪里可以找到静态文件.打开settings.py,拉到文件的底部,在STATIC_URL后面添加以下内容: STATICFILE ...
- CentOS7中实用的命令总结
一:软件安装配置方面 这里总结一下对个人很实用的功能 1.查询rpm包的依赖哪些文件:rpm -qpR xx.rpm,然后rpm会分析此包的文件依赖性 2.查询系统中安装了哪些rpm包:rpm -qa ...
- 基于SceneControl单击查询功能的实现
private void HandleIdentify_MouseDown(object sender, ISceneControlEvents_OnMouseDownEvent e) { this. ...