Loading

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)。

ATcoder 提交记录

posted @ 2023-09-17 23:28  Jryno1  阅读(13)  评论(0)    收藏  举报  来源