洛谷P2774 方格取數問題

2021-09-27 02:11:05 字數 956 閱讀 5524

洛谷p2774方格取數問題

題目鏈結

將題目反著考慮,假設現在所有數都取,需要刪掉一部分數,使得剩下的數沒有公共邊且刪掉的數之和最小。

容易發現,兩個位置有公共邊當且僅當他們橫縱座標的和的奇偶性不同。建立乙個二分圖,左邊為座標和為奇數的點,右邊為座標和為偶數的點,將左右兩邊存在公共邊的點連起來。s向左邊的每個點建邊,權值為點的權值,右邊每個點向t建邊,權值也為點的權值。求刪掉和最少的數使得剩下的數沒有公共邊就是求上面所建的圖的最小割。

#include using namespace std;

const int maxn = 1e4;

const int maxm = 1e6;

const int inf = 0x3f3f3f3f;

typedef long long ll;

struct dinic e[maxm];

int head[maxn];

ll dep[maxn], tol;

ll ans;

int cur[maxn];

int src, sink, n;

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

bool bfs() }}

return false;

}ll dfs(int x, ll maxx) }}

return 0;

}ll dinic(int s, int t)

return ans;

}void init(int n)

} g;

int n, m;

int getpos(int i, int j)

int main() else }}

ans = g.dinic(s, t);

cout << sum - ans << endl;

return 0;

}

洛谷 P2774 方格取數問題

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

洛谷P2774 方格取數問題

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

洛谷P2774 方格取數問題

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