Loading

【题解】CF516E Drazil and His Happy Friends

首先可以发现玩的序列 \((a_i,b_i)\)\(a_i\) 一定是 \(0,1,\cdots,n-1,0,1\) 循环往复,\(b_i\) 一定是 \(0,1,\cdots,m-1,0,1\) 循环往复。考虑令 \(g=\gcd (n,m),n'=\frac{n}{g},m'=\frac{m}{g}\),将 \([0,n)\) 拆为 \(n'\) 段区间,\([0,m)\) 拆为 \(m'\) 段区间,考虑区间之间的匹配。

注意到因为 \(n'\perp m'\),所以区间序列的周期的长度为 \(n'm'\):恰好为不同的区间匹配数,意味着左边的每个区间和右边的每个区间都凑过对。

因为区间是对位传递快乐,所以将男孩女孩以对 \(g\) 取模后的结果作为关键字来分组的话,只有同一组的男孩女孩才能够传递快乐,不同组互相不影响。

此时所有人一共分为了 \(g\) 组,如果一个组内没有最开始就快乐的人,那么这整个组的人都不可能快乐,可以直接判掉情况,剩下的情况必然有 \(g\leq b+g\) 。(可以发现,如果每组里有快乐的人,那么显然有限时间内所有人都会变快乐)。

考虑每一组,可以发现这其实就是原问题的 \(\gcd(n,m)=1\) 的特殊情况。现在要做这个特殊情况,因为男女各有起点不太好办,所以考虑将男女分开求,并且考虑内部传递的规律,这样就能将起点拆开。

注意到一个男生使一个女生 \(i\) 变快乐后,在 \(n\) 轮后这个男生会使女生 \((i+n)\bmod m\) 变快乐,不妨将这个关系看作女生 \(i\) 变快乐后,过了 \(n\) 天后 \((i+n)\bmod m\) 也会变快乐,这个就是快乐在女生内部的传递规律。

考虑证明只保留这样的快乐传递边不会使得答案变劣(因为必然不会是的答案变优)。女生 \(x\bmod m\) 在第 \(x\) 天变快乐是因为男生 \(x\bmod n\),假设该男生在第 \(tn+(x\bmod n)\) 天传递了自己的第一份快乐,给了女生 \((tn+(x\bmod n))\bmod m\),同时该男生在第 \(\lfloor\frac{x}{n}\rfloor+(x\bmod n)\) 将快乐传给了女生 \(x\bmod m\),中间隔了 \((\lfloor\frac{x}{n}\rfloor-t)n\) 天,按照上述"内部传递规律",女生 \((tn+(x\bmod n))\bmod m\) 的快乐一定会传给女生 \((tn+(x\bmod n)+(\lfloor\frac{x}{n}\rfloor-t)n)\bmod m\),恰好是女生 \(x\bmod m\),这说明答案不会变劣,由这个男生继续传下去和由女生内部关系传递是等价的。

接下来只需要保留女生内部的连边,以及考虑最开始就快乐的男生和女生的影响:

  • 连边权为 \(n\) 的边 \(i\rightarrow (i+n)\bmod m\),表示女生内部的连边。
  • 对于最开始就快乐的男生 \(t\),连边权为 \(t\) 的边 \(S\rightarrow t\bmod m\)
  • 对于最开始就快乐的女生 \(t\),连边权为 \(t\) 的边 \(S\rightarrow t\)

然后从 \(S\) 跑最短路求解即可,求答案的时候不需要考虑最开始就快乐的女生(因为其连边指的是"什么时候加入循环")。

图的规模不能接受。考虑这个图的特殊性:中间一个包含 \(m\) 个点的大环,从 \(S\) 向环上的点连了一些边。这样只需要找到大环的节点变化规律,然后将和 \(S\) 有连边的点拿出来做即可。

代码:Submission #127698965 - Codeforces

最前面的基本转化不难,本题主要的难点在于最后的部分:将问题分成两半,然后找出男生女生内部的传递规律,从而省掉大部分特殊情况,最后缩点最短路。

还有就是这种题的代码为啥不会写啊,好丢人,贺了粉兔的代码()

posted @ 2021-09-02 22:03  Qiuly  阅读(73)  评论(0编辑  收藏  举报