一道 nice easy problem
前置知识:网络流
题意:
给你 n+1n + 1n+1 个点的图,然后对于任意两点都有一条边,现在有k 个人从 0 点出发,每个人都能沿着任意边走到某个点(可以是 0 点,也就是不动)停下来要求对于任意点 i 恰好存在一个人经过,问所有人经过的边权和最大为多少。
题解:
先观察一下样例一的图:

分析一下,假设每个人走动形成的轨迹是一个新图,那么在这张图中,原点的出度小于等于 k 。其他点分两类讨论,对于不是终点的点的入度和出度都为 1 ,否则入度为 1 ,出度为 0。因此可以构建出这样的网络流模型。

然后来证明一下正确性:
首先是 0 点的出度一定是小于等于 k 的,因为从 st 点出发的流量最大只有 k,此外点 n+1n+1n+1 的唯一流量只能来源于 0 点,这条边一定会被算到最大流中,故 0 点出度至少是 1 ,所以这里是合理的。
然后再考虑除 0 点外在原图中每个点的入度,由于从 st 点出发的流量是不小于流入 en 点的最大流量,故 n+1→n+nn+1 \rightarrow n+nn

这道题目是ICPC2015 WF比赛中的一个问题,涉及网络流算法。给定一个n+1个点的图,其中每个人从0点出发,目标是使得经过每个点的人数恰好为1,求所有人经过的边权和最大值。通过建立网络流模型,证明了0点的出度小于等于k,其他点的入度和出度特性,并给出了代码实现。
最低0.47元/天 解锁文章
156

被折叠的 条评论
为什么被折叠?



