洛谷P2774 方格取數問題(最小割)

2022-03-01 14:50:36 字數 1178 閱讀 2694

傳送門

考慮一下,答案就是全域性和減去捨棄和

不難發現,如果我們按行數+列數的奇偶性分為兩類,那麼每一類中的數必然互不相鄰

那麼我們把原圖的點分為黑點和白點兩類,原地向白點連邊,黑點向匯點連邊,容量為點權,然後白點向相鄰的黑點連邊

考慮一下,不能有相鄰的,就是在殘留網路中不能有$s->u->v->t$這一條路徑,那麼肯定要在某乙個地方割掉。然後要求和最大,所以求得是最小割

然後最小割等於最大流,求一下最大流即可

1

//minamoto

2 #include3 #include4 #include5 #include6

#define inf 0x3f3f3f3f

7using

namespace

std;

8#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)

9char buf[1

<<21],*p1=buf,*p2=buf;

10 inline int

read()

20const

int n=10005,m=100005;21

int dx=,dy=;

22int ver[m],next[m],edge[m],head[n],dep[n],cur[n],tot=1;23

intn,m,s,t,ans;

24 queueq;

25 inline void add(int u,int v,int

e)29

bool

bfs()42}

43}44return

false;45

}46int dfs(int u,int

limit)56}

57return

flow;58}

59int

dinic()

64int

main()

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

74for(int j=1;j<=m;++j)

75if((i+j)&1)82

}83 printf("

%d\n

",ans-dinic());

84return0;

85 }

洛谷P2774 方格取數問題

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

洛谷 P2774 方格取數問題

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

洛谷P2774 方格取數問題

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