網路流24題 方格取數

2022-03-29 07:59:53 字數 939 閱讀 4099

先對棋盤黑白染色(這是常見套路),我們發現,如果選了乙個黑點,那相鄰的白點就不能選,反之同理

出現了衝突關係,考慮最大權閉合子圖

把黑點看成正權點,白點看成負權點,黑點向相鄰白點連邊,跑最大權閉合子圖即可

#include#include#include#include#define maxc 205

#define maxn 50005

#define maxm 500005

#define inf 0x3f3f3f3f

using namespace std;

int n,m;

int a[maxc][maxc];

int mark[maxc][maxc];

struct edgee[maxm<<1];

int sz=1;

int head[maxn];

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

int deep[maxn];

bool bfs(int s,int t)}}

return 0;

}int dfs(int x,int t,int minf)

}return minf-rest;

}int dinic(int s,int t)

return maxflow;

}inline int get_id(int x,int y)

const int walkx[4]=;

const int walky[4]=;

int main()

} int s=0,t=n*m+1;

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

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

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

}

網路流24題 方格取數

p2774 傳送門 方格取數和最大且要求兩兩沒有公共邊 遇到方格內的不相鄰問題,考慮黑白染色來對點分類 問題轉化為使黑點不和白點相鄰的最小代價,其中每個點的代價只計算一次 明顯的集合劃分模型,用最小割解決 include using namespace std define x first defi...

網路流 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的白...