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. windows下 Memcache cpu占用过高

    分析应该是memcache的内存大小还是默认配置,已经满足不了当前的大数据量的需要了,大量的新缓存需要进入,同时大量的旧缓存又需要被淘汰出来,一进一出导致CPU占用过多. 进入注册表,找到:HKEY_ ...

  2. APScheduler 浅析

    前言 APScheduler是python下的任务调度框架,全程为Advanced Python Scheduler,是一款轻量级的Python任务调度框架.它允许你像Linux下的Crontab那样 ...

  3. FutureTask详解

    1 基本概念 1.1 Callable与Future Runnable封装一个异步运行的任务,可以把它想象成为一个没有参数和返回值的异步方法.Callable与Runnable类似,但是有返回值.Ca ...

  4. window.load 和$(document).ready() 、window.load和body onload区别

    1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行. $(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕.2.编写个数不同 w ...

  5. 2018秋季c语言基础课第一次作业

    1)大学和高中最大的不同是没有人天天看着你,请看大学理想的师生关系是?有何感想? 答:邹欣老师提到了很多种关系,不外呼就是两种:平等或者不平等.平等的师生关系与陌生人无异,而自古以来尊师重道却被世人所 ...

  6. 2018.10.19 NOIP模拟 硬币(矩阵快速幂优化dp)

    传送门 不得不说神仙出题人DZYODZYODZYO出的题是真的妙. f[i][j][k]f[i][j][k]f[i][j][k]表示选的硬币最大面值为iii最小面值不小于jjj,总面值为kkk时的选法 ...

  7. 2018.08.19 NOIP模拟 change(简单模拟)

    Change 题目背景 SOURCE:NOIP2015-SHY-10 题目描述 Alice 和 Bob 又聚在一起了!他们已经厌倦了取石子游戏,现在他们热衷于切题.于是,Alice 找到了一道题让 B ...

  8. Netty学习第二节Java IO通信

    一.Java IO通信 名词解释: BIO通信:       采用BIO通信模型的服务端,通常由一个独立的Acceptor线程负责监听客户端连接,在接收到客户端请求后,为每一个客户端建立一个新的线程负 ...

  9. org.hibernate.HibernateException: /hibernate.cfg.xml not found等三个问题

    初次配置hibernate在myeclipse上: 出现三个问题,怎么都不好使,比对代码,没有问题,查看路径还是没有问题: 1.org.hibernate.HibernateException: /h ...

  10. HBase Thrift2 CPU过高问题分析

    目录 目录 1 1. 现象描述 1 2. 问题定位 2 3. 解决方案 5 4. 相关代码 5 1. 现象描述 外界连接9090端口均超时,但telnet端口总是成功.使用top命令观察,发现单个线程 ...