【题解】[CQOI2008] 传感器网络

发布时间 2023-09-29 15:34:52作者: cqbz_dxm

题意

给定一张有向无环图,从中选出一棵有根树(节点编号为 \(0\sim n\),树根为 \(n\)),使得 除根节点外 所有节点的出度的最大值最小。除根节点外,依次输出每个节点的父亲,并要求 字典序最小。(\(1\le n\le 50\)

*注意:由于个人习惯,这里将节点编号重编为 \(1\sim n+1\),根节点即为 \(n+1\)


解法

关注到「最大的最小」不难想到 二分

思考 check 的写法:(设当前二分的值为 \(k\)

于是对于树中除根节点外所有节点的出度给出了要求,即 出度 必须小于等于 \(k\),同时 其入度必须等于 \(1\)(因为这是棵树)。

这其实也就是对子节点和其父节点提出了数量上的要求,而确定了每组节点匹配关系即可确定一棵树,所以这道题本质上就是求「一种有要求的匹配关系」,进而想到 网络流 求解。

将网络中的点分为两类:

  1. 编号 \(1\sim n\):分别对应原图的除根节点外的点;
  2. 编号 \(n+1\sim 2n+2\)