day1 #485 DIV1 (CF986)
A 1600
每次把所有相同颜色的点拿出来,在图上跑多源bfs,就可以得出所有点到该颜色最近点的距离,然后跑完每个点sort就行了
B 1800
交换一次会导致逆序对奇偶性发生一次变化,3n次相当于逆序对奇偶性和n一致,7n+1次相当于逆序对奇偶性和n+1一致,也就是和n相反,所以直接树状数组求逆序对即可
C 2500
想了一会的记忆化搜索,考虑逐一加入点,如果这个点能和之前的点连边,那么就连通块数不增加,否则就增加,然后存在边的条件是存在之前的点点权是他补集的子集,但是这个动态添加不是很好操作,所以思考换一种做法,先把每个点向他的补集连单向边,然后从这个点开始dfs遍历他的所有子集,也包括他的子集的一些点的补集,这样子就会遍历这个点所在的所有连通块,于是每次对于没有被标记的点统计就相当于统计联通块了,访问的总复杂度不会超过n*2^(n-1)+m次,所以4s可以过
D 3100
3000+还做不来,先溜了
E 2800
先把w分解质因数,显然 ∏ g c d ( w , a i ) \prod gcd(w,a_i) ∏gcd(w,ai)就是w每个因子在x->y这条路径上出现次数幂和w该质因子的幂取min的积,然后问题就是怎么快速求这个路径取min,感觉在线不是很好做,于是考虑离线,1e7中的质数并不是很多,只有6.7e5个,所以似乎开个桶分别存每个质数幂次出现的次数是可行的,然后这使我们可以在复杂度要求内维护根到某个点路径上所有点的每个最大质因子幂次出现次数和。于是想到树上差分,把询问差分成四段{1->x},{1->y},{1->lca(x,y)},{1->fa(lca(x,y))}然后放到对应的点上,每次对于每个点跑w,将w质因分解,然后查询每个质因子在1到该点路径上出现的次数,如果大于w的质因子的次数,就按照w的计算,可以发现这里跑幂次复杂度最大是一只log的,然后w的质因子个数不会超过八个,所以总复杂度大致是nlognlogn
F 3300
3000+还做不来,先溜了