P2774 方格取數問題(網路流)

2022-04-30 08:33:10 字數 1211 閱讀 9225

p2774 方格取數問題

emm........仔細一看,這不是最大權閉合子圖的題嗎!

取乙個點$(x,y)$,限制條件是同時取$(x,y+1),(x,y-1),(x+1,y),(x-1,y)$,只不過權值取負而已

於是我們把圖分為黑點和白點,同顏色點之間不相鄰,不同顏色的點相鄰(如將$(x+y)%2==1$的點記為黑點)

假裝把白點的權值都看成負的

記$link(p,q,val)$為$p$向$q$連一條$val$的邊(包括反向邊)

藍後根據最大權閉合子圖的套路

對於黑點$p$與相鄰的白點$q$

$link(s,p,val_p)$

$link(p,q,inf)$

$link(q,t,val_q)$($val_q$不取負

藍後就可以愉快地跑最小割辣

#include#include

#include

#include

using

namespace

std;

#define n 100005

#define inf 1000000000

const

int d1[4]=;

const

int d2[4]=;

int n,m,d[n],cur[n],tot,s,t; bool

vis[n];

queue

h;int cnt=1

,hd[n],nxt[n],ed[n],poi[n],val[n];

inline

void adde(int x,int y,int

v)inline

void link(int x,int y,int v)

inline

int id(int x,int y)

bool

bfs()

}return

vis[t];

}int dfs(int x,int

a)return

f;

}int

dinic()

return

re;}

void draw(int x,int

y) }

else

link(p,t,w);

}int

main()

P2774 方格取數問題

題目描述 在乙個有 m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。對於給定的方格棋盤,按照取數要求程式設計找出總和最大的數。輸入格式 第 1 行有 2 個正整數 m 和 n,分別表示棋盤的行...

P2774 方格取數問題

none 在乙個有 m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。對於給定的方格棋盤,按照取數要求程式設計找出總和最大的數。輸入格式 第 1 行有 2 個正整數 m 和 n,分別表示棋盤的行...

P2774 方格取數問題

對棋盤黑白染色,源點向黑點連邊,匯點向白點連邊,權值均為這個點的權值。然後所有的黑點向白點連一條 inf 的邊。這樣求出的最小割一定會割掉與源點和匯點相連的邊,割掉這條邊相當於不選這個點。所以最後答案就是所有點的權值 最小割。include include include include defin...