網路流24題 方格取數問題(最大流)

2021-08-14 07:55:10 字數 1142 閱讀 3389

cogs

首先,相鄰的只能出現乙個,每個點要麼選,要麼不選。

所以不難想到最小割

所以,將棋盤黑白染色後

將某種顏色的格仔從源點連過去,容量為方格上的數

另一部分點連向匯點,容量為方格上的數

接著,相鄰的點之間連邊,因為這個不能割開,所以容量為inf

這樣連完邊,如果乙個點要選,

那麼,他必然要割開和他相鄰的點

那麼,相鄰的點和匯點的連邊就會被割掉,

這就是減少的總和

所以,答案就是所有數的總和減去最小割

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxl 500000

#define max 50000

#define inf 1000000000

inline

int read()

struct line

e[maxl];

int h[max],cnt;

int s,t,n,m;

inline

void add(int u,int v,int w)

;h[u]=cnt++;

e[cnt]=(line);h[v]=cnt++;

}int level[max];

bool bfs()

}return level[t];

}int dfs(int u,int flow)

}return ret;

}int dinic()

int d[4][2]=;

int g[50][50],tot,sum;

int main()

for(int i=1;i<=n;++i)

for(int j=1;j<=m;++j)

}printf("%d\n",sum-dinic());

return

0;}

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