ZR模拟赛5
我是sb。
http://zhengruioi.com/contest/946
A
黑格子可以并查集判连通。
白点连通,其实相当于希望没有一个大的环,即可以理解成一个树。边数为日字形的个数-田字格的数量,点数为黑格子数量。然后搞搞即可。
http://zhengruioi.com/submission/338139
B
考虑按面值从小到大 DP。\(f(i,j)\):只考虑面值 \([i,n]\) 的币和物,手上还有 \(j\) 个价值 \(i\) 的币,方案数。DP 时把面值 \(i\) 转到面值 \(i-1\),然后做。\(f_{i,j}\to f_{i,j-c}, f_{i-1,j-a_{i-1}}\)。这种会炸。
考虑每次转移时 \(j\) 和剩余总价值取 min。发现剩余总价值是一个关于 \(i\) 的函数 \(f_i\)。发现 \(\sigma f_i\le 2\sigma c_i\)。
从大到小 DP,每次 DP 范围限制一下,NTT。
从小到大 DP,其实也是一样的,乘法改成除法,甚至能不用判断 DP 范围。
具体步骤就是,对于每一种硬币,做一下分治 NTT,然后将得到的多项式 resize 一下,最后补充一下\(i\to i+1\) 面值的转移。\(f(i,j)\) 表示前 \(i\) 个币,需要 \(j\) 个第 \(i+1\) 个币的补贴(因为仅用前 \(i\) 个币不足以支付)。
http://zhengruioi.com/submission/338312
C
考虑随便选一个点 \(x\),查询和自己连的所有边,看度数。注意到评测机是 adaptive,每次必须问满 \(a,b,c\) 的出边,所以已经 \(3n\) 个了。
- \(deg_x=n-2\),则 \(c=x\).
- \(deg_x\le 2\),有两种情况
- \(a=x\)
- 与 \(c\) 相连
考虑用 \(2n\)次查询所有 \(x\) 的邻居的度数。
- \(3\le deg(x)\le n-3\),则必然不是 \(a,b,c\) 的一个。令 \(S,T\) 分别是 \(x\) 的邻居,非邻居点集。从 \(S\) 中选点 \(u\),\(T\) 中选点 \(v\),如果无边就找再找一个 \(x\),有边就再找一个 \(y\)。\(S\) 空时 \(a=v\)。

浙公网安备 33010602011771号