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的更多相关文章

  1. [JZOJ5888]GCD生成树

    [JZOJ5888]GCD生成树 题目链接 gugugu 分析 对于N很小的情况,暴力Prim即可 对于值域很小的情况,我的想法与solution不太一样,将值相同的缩成一个点,\(O(w^2)\)预 ...

  2. NOIP前的刷题记录

    因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数   组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...

随机推荐

  1. socket编程介绍

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...

  2. ThinkPHP5路由图解

  3. Santa Claus and a Place in a Class

    /* Santa Claus is the first who came to the Christmas Olympiad, and he is going to be the first to t ...

  4. Ubuntu下部分软件的简介及安装

    1.安装linux摄像头应用软件cheese sudo apt-get install cheese 2.Ubuntu Tweak    Ubuntu Tweak是一款专门为Ubuntu(GNOME桌 ...

  5. ILSpy 反编译.NET

    ILSpy 是一个开源的.NET反编译工具,简洁强大易用是它的特征.在绝大多数情况下,它都能很好的完成你对未知程序集内部代码的探索.

  6. Laravel 根据任务的性质和要求决定处理的方式(Cron or Job)

    1 前言 一般地,我们在应用的开发中,会碰到各种各样的任务解决需求.我的原则是,选择合适的方法做正确的事. 2 任务分类 在开发中, 一般会有以下几种性质的任务. 2.1 实时任务 一般是指,任务间的 ...

  7. [VBScript] 自动删除2小时以前生成的文件

    保存为deleteTempFiles.vbs,双击即可运行 dim folder, file, mFSO, subfolder Set mFSO = CreateObject("Script ...

  8. spring boot打包后windows启动乱码

    事情的起因什么的就不多表了,直接进入主题... 项目都要上线了,结果发现使用 idea mvn install之后的 jar在windows下启动乱码,而使用idea启动却没有问题!!! 这是神马情况 ...

  9. Blender3d做大型项目真实地形快速建模

    https://www.rr-sc.com/thread-16531254-1-1.html Blender3d是一款优秀的动画和建模工具,但在做一些大型建设项目时需要在真实地形上来表现,Blende ...

  10. Java中的时间日期处理

    程序就是输入——>处理——>输出.对数据的处理是程序员需要着重注意的地方,快速.高效的对数据进行处理时我们的追求.其中,时间日期的处理又尤为重要和平凡,此次,我将把Java中的时间日期处理 ...