網路流24題 方格取數

2022-05-13 10:23:47 字數 960 閱讀 8577

p2774 傳送門

方格取數和最大且要求兩兩沒有公共邊

遇到方格內的不相鄰問題,考慮黑白染色來對點分類

問題轉化為使黑點不和白點相鄰的最小代價,其中每個點的代價只計算一次

明顯的集合劃分模型,用最小割解決:

$,,$

#include using

namespace

std;

#define x first

#define y secondtypedef

long

long

ll;typedef pair

p;const

int maxn=1e5+10,inf=1

<<30

;int n,m,dat[105][105

],sum;

namespace

maxflow

e[maxn<<2

];

int s,t,head[maxn],iter[maxn],dist[maxn],tot=-1

;

void add_edge(int

from,int to,int

cap)

bool

bfs()

}return dist[t]!=-1

; }

int dfs(int v,int

f)

return

ret;

}intdinic()

return

ret;

}}using

namespace

maxflow;

int dx=,dy=;

int idx(int x,int y)

intmain()

}printf("%d

",sum-dinic());

return0;

}

網路流24題 方格取數

先對棋盤黑白染色 這是常見套路 我們發現,如果選了乙個黑點,那相鄰的白點就不能選,反之同理 出現了衝突關係,考慮最大權閉合子圖 把黑點看成正權點,白點看成負權點,黑點向相鄰白點連邊,跑最大權閉合子圖即可 include include include include define maxc 205 ...

網路流 24題 方格取數

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

24題 方格取數問題 網路流

在乙個有 n m n times m n m 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。這道題明顯是乙個二分圖。我們可以把每個點染色,將i j i ji j為偶數的點連向t tt,否則連向s ss。那麼對於每乙個連s ss的白...