ABC320G题解
题意:
给定 $n$ 个长度为 $m$ 的字符串,其中只有 $0-9$ 的数字。从第 $0$ 个时刻开始,每个时刻可选择一个没有被选择过的字符串,如果一个字符串在 $T$ 时刻固定,之后这个字符串会显示第 $(T\bmod m)+1$ 个字符。求最短在第多少个时刻之前,可以让每一个字符串都显示出数字,并且显示的数字都一样,可能无解。
$n\le100$,$m\le10^5$
Sol:
假设固定结果数字是 $num$,问题可以转化成:每一个字符串可以在若干个时刻被固定,求最早的时刻能够把每个字符串都固定。
具体分析:“若干个时刻”范围是 $\mathcal{O}(nm)$ 的,显然最劣的情况是所有时间都叠在一起。而求最早的时刻可以考虑二分答案,之后判断是否可行即可。
这个问题显然是一个二分图匹配问题,将每个字符串看作左部点,时间点看作右部点,每次固定时间上限和数字 $num$ 之后,可以找到字符串连接的时间节点,判断这个图匹配情况即可。
然而节点数量是 $\mathcal{O}(nm)$,边数只会更多,行不通。考虑是否真的对于每个字符串都需要找到 $\mathcal{O}(nm)$ 个点。实际上不需要,因为左边只需要匹配 $n$ 个点,因此对于每个点只需要考虑连出去的前 $n$ 条边即可(因为这样可以保证可以找到一个之前没有用过的时刻点),因此实际上可以做到点数和边数都是 $\mathcal{O}(n^2)$ 级别的,之后匹配即可(代码里写的是 dinic)。

浙公网安备 33010602011771号