洛谷 P2774 方格取數問題 解題報告

2022-09-04 12:15:11 字數 1718 閱讀 7416

主要說一下針對這種型別的題的思路:

首先算出最大得到的值,我們求最小割。

將網格圖按照(行+列)的奇偶性分開,變成乙個二分圖

由奇點向偶點連邊,走了乙個不能走另乙個的話,就連inf邊(表示不可能割掉這條邊)

具體細節根據題目分析

然後再來講一下這道題:

同樣非常的模板x.

**如下:

#include #include 

#include

#include

#include

#include

#define ll long long

#define space putchar(' ')

#define endl putchar('\n')

#define debug puts("------------------------")

#define f(i,x,n) for(int i=x;i<=n;++i)

#define f_(i,x,n) for(int i=x;i>=n;--i)

using

namespace

std;

inline

void read(int &a) while(c>='

0'&&c<='

9') a=(a<<3)+(a<<1)+c-48,c=getchar();a*=b; }

inline

int rem() while(c>='

0'&&c<='

9') a=(a<<3)+(a<<1)+c-48,c=getchar();return a*=b; }

inline

void write(int x)

inline

void w(int x) write(x);}

/**/

const

int n=105*105,inf=0x3f3f3f3f

;const

int fx=,fy=;

int n,m,s,t,head[n],cnt=1

,dep[n],cur[n];

ll maxflow,ans;

bool

vis[n];

struct

edge

e[n*100

];/**/

namespace

dinic

; head[u]=cnt;

}inline

void add(int u,int v,int

c)

inline

bool

bfs()}}

}return dep[t]!=inf;

}int dfs(int u,int

flow)

int used=0,minflow=0

;

for(int i=cur[u];i;i=e[i].nxt)}}

return

used;

}ll dinic()

}return

maxflow;

}}using

namespace

dinic;

intget(int x,int

y)int

main()

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

cout

}

code

洛谷P2774 方格取數問題

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

洛谷 P2774 方格取數問題

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

洛谷P2774 方格取數問題

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