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

2022-05-07 19:24:07 字數 995 閱讀 3772

這道題要求取不相鄰的數字讓和最大。我們不防反面考慮。考慮在全部聯通時選多少數可以將次圖斷開,讓源點匯點不連通,並且使數的和最小,所以答案為數字總和-選的數字和。

相鄰的數字只能選乙個,所以我們將這個**染色,將這個圖染成黑白棋盤:

我們將所有的黑點和源點相連線,流為當前格仔的值,將所有的白點和所有的匯點相連線,流為當前格仔的值。在將所有的黑點和所有相鄰的白點相連,流量為inf,注意判斷界限!!!!。

所以為了滿足條件要保證沒有一條邊由源點-->黑點-->白點-->匯點的路徑,所以不難看出是最小割了,前面說了答案為數字總和-選的數字和。

所以直接跑最小割就好了

#include#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)

#define rg register

using namespace std;

typedef long long ll;

int n,m,s,t,z,y,x;

inline int read()

struct nodea[200001];

int cnt,head[200001],cur[200001];

void add(int x,int y,int c)

queue q;

int dep[10001];

int bfs()

}if(dep[t]!=0)

return 1;

else

return 0;

}int dfs(int k,int list)}}

return 0;

}int dinic()

int ans=dinic();

printf("%d",sum-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個...