构造

1.AGC029F

题意

给定 \(n-1\) 个点集(全集为 \(\{1,2,\dots,n\}\)),从每个集合内选两个点连边,使得最后形成一棵树。输出方案。

\(n-1\) 条边按顺序对应这 \(n-1\) 个集合输出。

\(n \leq 10^5\)\(\sum |S| \leq 2 \times 10^5\)

题解

“每个集合只能选一条边”,“除根外树上每个点只有一条父边”。两者联系起来,可以理解为任意选一个点为根,其余每个点对应一个集合,表示这个点的父边选自这个集合。

这个对应关系很容易想到二分图匹配,于是建图,左右各 \(n-1\) 个点,左 \(i\) 向右 \(j\) 连边当且仅当 \(i\in S_j\)。如果匹配无解就寄了。网络流跑二分图匹配后左边的点和右边匹配集合中的每个点(除自己)连边(边数为集合大小之和),不连通也寄了(边不用真的连出来,并查集判断就行)。

考虑构造,从根开始 BFS,对于每个和包含根的集合对应的点,将它的父亲设为根,后面同理。

构造正确性可以用反证法证明,假设无法通过这个构造方法构造出合法解,那么一定是还有点没有被 BFS 到,于是这个点对应的集合中的点都没有被 BFS 到,进而推出和这个点连通的所有点都没有被 BFS 到,但这个点和根是连通的(前面判过了),矛盾。

最后那个证明是自己 YY 的,题解似乎都没证。这道题关键在题意转化

posted @ 2024-01-10 18:51  牛肉爱吃dks  阅读(6)  评论(0编辑  收藏  举报