GCD Counting Codeforces - 990G
https://www.luogu.org/problemnew/show/CF990G
耶,又一道好题被我浪费掉了,不会做。。
显然可以反演,在这之前只需对于每个i,统计出有多少(x,y),满足x到y简单路径上所有点权值都是i的倍数即可
方法1:
可以发现,对于给定的i,这样的“权值是i的倍数”的点一定可以构成一些连通块,每个连通块内部的点两两符合条件,且不会出现跨连通块的合法点对
自己的做法:
那么,搞2*10^5个动态开点的并查集,对于每条边(u,v),枚举所有a[u]和a[v]的公因子i(可以预处理出1-200000的所有因子),在第i个并查集中合并u和v所在的集合,顺便统计答案
多麻烦啊。。。而且码量大复杂度n*log^2*sqrt(因子sqrt;线段树维护动态开点数组,因此并查集查询一次log^2)常数大空间还大。。A不掉的。。
别人的做法:
枚举每个i,找到所有边(u,v)满足gcd(a[u],a[v])是i的倍数的(可以开一堆vector来搞),用带撤销并查集合并,每个i搞完后撤销这次的所有修改
枚举i+找的复杂度是n*log;操作的复杂度是均摊的,每条边因子sqrt个因此被枚举到sqrt次,每被枚举到一次需要一次log的合并,复杂度n*sqrt*log(好吧还是很不科学,但是显然非常的不满;毕竟这个因子个数虽然说是根号,但200000以内最多也就160个因子)
貌似以上做法还A不掉?可以在并查集进行修改的时候记录一下这次修改进行的"时间",访问到fa[i]时查询一下这个值是否是当前时间的,如果不是就重置一下fa[i]再返回访问的答案,这样就可以路径压缩+按秩合并把log换成反阿克曼函数
听说仍然A不掉?好像有人加了奇怪的剪枝过了的?然而这已经是正解复杂度了
方法2:
路径统计看上去可以点分,这个点分可以直接容斥,比较方便
统计出当前点分中心到当前连通块内所有点的路径gcd,将所有这些值放入一个数组,那么问题就变成从数组中任取两个数取gcd来统计贡献
暴力枚举每一个数的所有因子统计贡献
其实由于所有这些数都gcd了一次当前点分中心权值,因此所有这些数的公因子最多只有sqrt个,枚举统计贡献即可
每个连通块复杂度size*sqrt+sqrt,总复杂度大概n*log*sqrt(sqrt仍然是因子个数,不满)
GCD Counting Codeforces - 990G的更多相关文章
- Educational Codeforces Round 45 (Rated for Div. 2) G - GCD Counting
G - GCD Counting 思路:我猜测了一下gcd的个数不会很多,然后我就用dfs回溯的时候用map暴力合并就好啦. 终判被卡了MLE..... 需要每次清空一下子树的map... #inc ...
- CF1101D GCD Counting
题目地址:CF1101D GCD Counting zz的我比赛时以为是树剖或者点分治然后果断放弃了 这道题不能顺着做,而应该从答案入手反着想 由于一个数的质因子实在太少了,因此首先找到每个点的点权的 ...
- CF EDU 1101D GCD Counting 树形DP + 质因子分解
CF EDU 1101D GCD Counting 题意 有一颗树,每个节点有一个值,问树上最长链的长度,要求链上的每个节点的GCD值大于1. 思路 由于每个数的质因子很少,题目的数据200000&l ...
- CodeForces - 990G GCD Counting
Discription You are given a tree consisting of nn vertices. A number is written on each vertex; the ...
- CodeForces - 1101D:GCD Counting (树分治)
You are given a tree consisting of n vertices. A number is written on each vertex; the number on ver ...
- cf 990G - GCD Counting
题意 #include<bits/stdc++.h> #define t 200000 #define MAXN 200100 using namespace std; int n; in ...
- D. GCD Counting(树上dp)
题目链接:http://codeforces.com/contest/1101/problem/D 题目大意:给你n个点,每个点都有权值,然后给你边的关系,问你树上的最大距离.(这里的最大距离指的是这 ...
- [gcd,灵感] Codeforces 1200C Round Corridor
题目:https://codeforces.com/contest/1200/problem/C C. Round Corridor time limit per test 1 second memo ...
- Mike and gcd problem CodeForces - 798C (贪心思维+数论)
题目链接 比较棒的一道题, 题意: 给你一个N个数的数组,让你用尽量少的操作使整个数组的gcd大于1,即gcd(a1 ,a2,,,,an) > 1 如果可以输出YES和最小的次数,否则输出NO ...
随机推荐
- u-boot简单学习笔记(二)——AR9331 uboot.lds分析
最开始系统上电后 从uboot.lds开始引导 OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", ...
- C++类使用static小例子(新手学习C++)
//为什么类的成员中不能包括动态分配的数据,若包含静态数据怎么使用?#include <iostream>using namespace std;class point{ priva ...
- MySQL(6)--复制,docker容器中
MySQL5.7.11实现replication 启动两个安装好mysql的空的docker image ----------------- shell1 master $docker run -i ...
- POJ 2482 Stars in Your Window(线段树+扫描线)
题目链接 非常不容易的一道题,把每个点向右上构造一个矩形,将问题转化为重合矩形那个亮度最大,注意LL,注意排序. #include <cstdio> #include <cstrin ...
- iOS 常用的几个第三方库
网络通信 1.ASIHTTPRequest 这是一个经典的老库,功能完全而强大,但已经停止更新很久了(iOS5.0停止更新,但是我最近看github上这个项目有新改动).在不同iOS版本上略微有一些小 ...
- react native 之页面跳转
第一章 跳转的实现 1.component 中添加这行代码 <View style={styles.loginmain}> <Text style={styles.loginte ...
- INFO: Ignoring response <403 https://movie.douban.com/top250>: HTTP status code is not handled or not allowed
爬取豆瓣电影top250,出现以下报错: 2018-08-11 22:02:16 [scrapy.core.engine] INFO: Spider opened 2018-08-11 22:02:1 ...
- WAS:节点不同步问题
刀片服务器硬盘坏了,换了硬盘后,通过dmgr无法重启该节点上的server. 单机./starServer 后,服务虽然启动了,但后台一直提示如下: [-- ::: CST] RoleViewLead ...
- I.MX6 MAC Address hacking
/************************************************************************** * I.MX6 MAC Address hack ...
- [Selenium] Selenium common Actions Examples
1.sendKeys() 在文本框中输入字符串 WebElement searchBox = driver.findElement(By.name("q")); searchBox ...