網路流 網路流24題 方格取數問題

2021-09-28 18:52:41 字數 1278 閱讀 2188

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個...