luogup2274
題目:m*n方格中選定量的格仔,使總和最大且各不相鄰
題解:假設全部都選,現要刪去一些點,使之滿足條件,且刪的點權最小。
於是問題轉換了。。。
我也不知道為什麼 我們想到了網路流割邊
相鄰格仔染異色(黑白),黑點連源,白點連匯,流限為其點權,互相限制的黑白點連一條無限流。然後求最小割。
相當於求怎樣割去最小的邊(必定是代表點權的那種,無限流也不可能最小。。。),使圖中不連通,也就是限制條件不存在。
————————解畢————————
#include
using
namespace std;
const
int n=
1e4+
10,m=
1e5+
10,inf=
0x7fffffff
;int s,t;
int n,m;
int mp[
102]
[102];
int head[n]
,nex[m]
,to[m]
,val[m]
,tot=1;
void
build
(int u,
int v,
int w)
int t[n]
,dep[n]
;void
bfs(
int s)}}
}int ans=0;
intdfs
(int s,
int f)
int u=0;
for(
int i=head[s]
;i;i=nex[i])}
if(!--t[dep[s]
])dep[s]
=t+100
; t[
++dep[s]]++
;return u;
}int
num(
int x,
int y)
bool
check
(int x,
int y)
boolin(
int x,
int y)
intmain()
bfs(t)
;while
(dep[s]
<=t+3)
dfs(s,inf)
;printf
("%d"
,sm-ans)
;}
24題 方格取數問題 網路流
在乙個有 n m n times m n m 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。這道題明顯是乙個二分圖。我們可以把每個點染色,將i j i ji j為偶數的點連向t tt,否則連向s ss。那麼對於每乙個連s ss的白...
網路流24題 方格取數問題
題面 傳送門思路 相鄰的點不能同時取,那麼在這個圖中,實際上分了兩種格仔,每種格仔相互之間隨便取 那麼就是二分圖了 把相鄰的點之間連邊,得到乙個二分圖,我們實際上就是要求這個圖的帶權最大獨立集 於是這道題轉化為二分圖問題,而二分圖中最大獨立集等於全集減去最小點覆蓋,最小點覆蓋等於這個圖的最大匹配 都...
網路流24題 方格取數問題
在乙個有m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。對於給定的方格棋盤,按照取數要求程式設計找出總和最大的數。第1 行有2 個正整數m和n,分別表示棋盤的行數和列數。接下來的m行,每行有n個...