题解 | CF986 / Codeforces Round 485 (Div. 1)
题解 | CF986 / Codeforces Round 485 (Div. 1)
未独立完成的题目
- D(实现困难)
- E
A
题意
一张 个点的连通图, 种货物,每个点有一种货物,运送货物的代价是两点间最短路的长度。对每个点分别求聚集 s 种货物的最小代价。。
题解
注意到 的范围很小,可以对每种货物跑一个最短路,dis[i][j]
表示离 最近的货物 到 的距离。然后对每个点求离它最近的 个货物即可。
总结
考场 AC,重做时独立完成。
B
题意
有一个长度为 的序列 ,打乱序列的方式是随机选两个数,然后交换。 进行 次操作, 进行 次操作。给出一个 的排列,问是谁打乱的。
题解
注意到 和 的奇偶性相同,而 和 奇偶性不同。同时,我们还原序列进行的操作数和打乱序列进行的操作数的奇偶性相同。所以可以 还原这个序列(策略是不断交换 和 ,直到 ),然后比较一下操作数和 的奇偶性即可。
总结
考场 AC,重做时独立完成。
C
题意
一个由 个整数构成的集合,每个整数均在 之间。以每个整数为顶点建立一个无向图,当两个整数 x, y
符合 x & y = 0
时,则认为 之间存在一条边。计算图中连通块的数量。
题解
设对 x 按位取反的结果为 z,则 x & y = 0
意味着 y & z = z
,y 的 1 是 z 的 1 的子集。总共有 2 ^ 22
种状态,对于每个没被标记过的 x 直接爆搜 + 标记,复杂度完全吃得消。
总结
重做时独立完成。
D
题意
给出 ,选 个正整数 (可以相同),使得 ,并最小化它们的和。
题解
对一些小数据打表,可以观察到用 和 凑数是最经济的。 对 进行研究发现,在 的时候值最大,而 和 都很接近 。所以考虑用 凑数。设这 个正整数的和为 ,则:
- ,全部用
- ,用两个 ,剩下全用
- ,用一个 ,剩下全用
k 的值可以通过二分确定,但是二分太慢了。解方程 ,。可以通过 的长度(小于等于 )去估计一个大概的 值,再暴力乘上去。注意到这题卡常,显然要 ,可能要压位高精。
总结
这题做法还记得,但是实现起来比较困难。
E
题意
给你一棵树,每个点有点权(),m 个询问,每次给定 x, y, w
,问 x -> y
路径上的点的 点权与 w 的 gcd
的积,对 取模。
题解
首先把询问 差分成
然后就是树上差分,把询问离线到树上,然后一遍 去解决。 本质是把每个质因数的幂次取 。注意到 以内的质数个数只有 级别。可以给每个质数开个桶, 表示正在处理的部分里质因数分解后 的次幂为 的点的个数。
总结
未独立完成。
F
题意
给定 ,问是否可以将 分为若干个 的因数之和。题目钦定了 的时候不能。
题解
题目限制最多 个不同的 ,所以先将询问离线下来,对每个 解决问题。先对 质因数分解,如果质因数个数大于 ,用同余最短路解决;如果等于 ,设这两个质因数为 ,解 即可;如果等于 1,判一下 是否等于 即可。
关于同余最短路,可以在最小的质因数的剩余系里做,并且对 向 连一条边权为 的边。这样跑最短路,得到的结果 就是通过若干个 凑到 的最小值。如果 ,可以通过 凑到恰好为 ;否则无解。
总结
独立完成。