Luogu2774 方格取數問題

2021-08-21 02:18:29 字數 1053 閱讀 9481

題目描述

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

輸入輸出格式

輸入格式:

第 1 行有 2 個正整數 m 和 n,分別表示棋盤的行數和列數。接下來的 m 行,每行有 n 個正整數,表示棋盤方格中的數。

輸出格式:

程式執行結束時,將取數的最大總和輸出

輸入輸出樣例

輸入樣例#1:

3 3

1 2 3

3 2 3

2 3 1

輸出樣例#1:

說明m,n<=100

題解學習一波棋盤黑白染色跑網路流的技巧。

將網格染成棋盤一樣黑白相間的樣子,黑點一坨,白點一坨跑二分圖。強制黑點向四周的白點連邊,邊權in

f inf

;超級源點向黑點連邊,邊權為點權;白點向超級匯點連邊,邊權為點權。

乖乖跑最小割。。。

**

#include

#define inf 0x3f3f3f3f

using

namespace

std;

const

int m=2e4+5;

struct sded[m];

int start,end,id,n,m,sum,lay[m],itr[m];

vector

mmp[m];

queue

dui;

void add(int f,int t,int v)

; mmp[t].push_back(id);ed[id++]=(sd);

}void in()

}bool bfs(int s,int e)

}return lay[e];

}int dfs(int s,int e,int mn)

return ans;

}void ac()

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