洛谷P2774 方格取數問題

2022-05-31 04:42:12 字數 1803 閱讀 5272

題目:

none!

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

輸入格式:

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

輸出格式:

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

輸入樣例#1: 

3 3

1 2 3

3 2 3

2 3 1

輸出樣例#1: 

11
m,n<=100

網路流24題之一orz。

二分圖點權最大獨立集。

在二分圖中找到權值和最大的點集,使得它們之間兩兩沒有邊。

答案=總權值-最小點覆蓋集。

證明?我也不會啊orz。看這吧。

《最小割模型在資訊學競賽中的應用》

相鄰的格仔放入不同的集合x,y。

1、從s向x集合中每個頂點連線一條容量為格仔中數值的有向邊。

2、從y集合中每個頂點向t連線一條容量為格仔中數值的有向邊。(兩個只要乙個符合就行了)

3、相鄰黑白格仔xi,yj之間從xi向yj連線一條容量為無窮大的有向邊。

ans=sigma(a(i,j))-maxflow();

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9#define maxn 1100

10#define inf (1<<30)

11struct

line;

15 vectoredge;

16 vectorg[maxn];

17int fx[4][2]= ,,,};

18int

m,n,tot,top;

19int

c[maxn][maxn];

20int

s,t;

21int

cur[maxn];

22int

dis[maxn];

23bool

vis[maxn];

24void addedge(int

from,int to,int

cap));

26 edge.push_back((line));

27int m=edge.size();

28 g[from].push_back(m-2

);29 g[to].push_back(m-1

);30}31

bool

bfs()48}

49return

vis[t];

50}

51int dfs(int x,int

a)63}64

return

flow;65}

66int

dinic()

72return

ans;73}

74int

main()81}

82 s=0; t=n*m+1;83

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

97} 98}

99}100 cout

101return0;

102 }

view code

洛谷P2774 方格取數問題

洛谷p2774方格取數問題 題目鏈結 將題目反著考慮,假設現在所有數都取,需要刪掉一部分數,使得剩下的數沒有公共邊且刪掉的數之和最小。容易發現,兩個位置有公共邊當且僅當他們橫縱座標的和的奇偶性不同。建立乙個二分圖,左邊為座標和為奇數的點,右邊為座標和為偶數的點,將左右兩邊存在公共邊的點連起來。s向左...

洛谷 P2774 方格取數問題

通過題目描述我們可以很明顯的看出要通過二分圖建模,二分圖求最大獨立點集很容易,就是建立二分圖求n 最小割,然而這裡加入了權值,而且權值是在點上的,那麼我們對於每個點連一條到源點或匯點的容量等於權值的邊,求最小割即可,見胡伯濤 include include include include inclu...

洛谷P2774 方格取數問題

題目鏈結 將題目反著考慮,假設現在所有數都取,需要刪掉一部分數,使得剩下的數沒有公共邊且刪掉的數之和最小。容易發現,兩個位置有公共邊當且僅當他們橫縱座標的和的奇偶性不同。建立乙個二分圖,左邊為座標和為奇數的點,右邊為座標和為偶數的點,將左右兩邊存在公共邊的點連起來。s向左邊的每個點建邊,權值為點的權...