「TFOI R1」Unknown Graph 题解

这里是出题人题解。

\(\text{Solution Of Problem C : Unknown Graph.}\)

题意还是很清晰的,这里就不再赘述题意了。

首先如果没有 \(q\) 的限制,显然有一种贪心思想就是每个点每次选剩余入度最多的与之连边。但是因为限制,就无法保证贪心的正确性。

那该怎么办呢?

一个大提示:这题是一道网络流。(您都看到这里了不会还不会做吧。

感觉如果知道算法是网络流的话,这题应该挺版的。建模方法如下:

  • 源点与所有点 \(i\) 建立容量为 \(in_i\) 的边。

  • 所有点 \(i+n\) 与汇点建立容量为 \(out_i\) 的边。(\(in,out\) 分别表是入度和出度)

  • 对于任意两个点 \(i,j\) 如果 \(i\not=j\)\(i,j\) 之间可以连边的话(即没有被限制),将 \(i,j+n\) 建立一条容量为 \(1\) 的边。

最后跑一遍最大流,由于保证了有解,所以跑完之后肯定是满流。

由于这个图是一个近似二分图,而完全优化的 Dinic 在二分图的复杂度是 \(\mathcal{O} (m\sqrt n)\),此处,\(m≈n^2\),故是可行的。

输出方案的话,就是如果建立的第三种边容量是 \(1\),就说明 \(i\)\(j\) 连了一条边。

总的来说,这题难点在于想到这题是一道网络流,其他部分还是比较好理解的,输出方案也并不难。

posted @ 2024-03-02 19:44  Saltyfish6  阅读(2)  评论(0编辑  收藏  举报
Document