方格中取数若干,两两不相邻,求最大选数和。
样例:
3 3
1 2 3
3 2 3
2 3 1
输出:
11
ans=2+3+3+3=11
黑白染色
建成二分图:
中间这些边连成INF(即不限制流量)
其实就是求最大独立集
定理:|二分图最大独立集|=|顶点数|-|二分图最大匹配数|
这个,我不会证明。
所以:|二分图最大独立集|=|总价值|-|二分图最大匹配价值|
考虑构图:s=>黑点=>白点=>t
首先,对与第[i][j]格,有价值为val[i][j]
edge(s,黑点,val[i][j])
edge(白点,t,val[i][j])
然后,对所有黑点
edge(黑点,相邻白点,INF)
令,|总价值|=sum=∑∑val[i][j] (1<=i<=n,1<=j<=m)
|二分图最大匹配价值|<=>|最小割|<=>|最大流| 这个就不分析了。
ans=sum-MaxFlow(G)
于是,代码呼之欲出
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include