在一个有 $ m \times n $ 个方格的棋盘中,每个方格中有一个正整数。
现要从方格中取数,使任意 $ 2 $ 个数所在方格没有公共边,且取出的数的总和最大。
概念
点覆盖集:无向图G的一个点集,使得该图中所有边都至少有一个端点在该集合内。
点独立集:无向图G的一个点集,使得任两个在该集合中的点在原图中都不相邻。
最小点权覆盖集:点覆盖集中权值和最小的。
最大点权独立集:点独立集中权值和最大的。
最小点权覆盖集=最大流=最小割
最大点权独立集=权值和-最小点权覆盖集
题解
- 问题求的是最大点权独立集。
- 最大点权独立集=权值和-最小点权覆盖集,可以理解为只有取出了最小点权覆盖集使得任意一条边都被选取,剩下的点即为最大点权独立集。
- 求最大流即可
- 又写错了点转化为值,正确:$(i-1)m+j$
代码
1 |
|