P2774 方格取數問題

2022-05-19 11:07:51 字數 1234 閱讀 8093

傳送門

考慮一開始把所有點都選了,再放棄一些點使得選擇合法

考慮求出最小的放棄掉的價值

看到棋盤先黑白染色冷靜一下

從 $s$ 向所有黑點連一條流量為點權的邊,如果滿流表示我放棄這個點的價值

從所有白點向所有 $t$ 連邊,如果滿流說明我放棄這個點的價值

從所有黑點 $x$ 向它四個方向的四個白點 $a,b,c,d$ 連邊,流量 $inf$,表示不是邊 $(s,x)$ 滿流就是邊 $(a,t),(b,t),(c,t),(d,t)$ 都滿流(不是放棄 $x$ 就是放棄 $a,b,c,d$)

然後最小割就是最小放棄的價值

emm十分顯然

#include#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;inline

intread()

while(ch>='

0'&&ch<='

9')

return x*f;

}const

int n=1e5+7,m=4e6+7,inf=1e9+7,xx[4]=,yy[4]=;

int fir[n],from[m],to[m],val[m],cntt=1

;inline

void add(int a,int b,int

c)int

dep[n],fir[n],s,t;

queue

q;bool

bfs()

}return dep[t]>0;}

int dfs(int x,int

mxf)

}return

fl;}

inline

int dinic()

int n,m,id[107][107

],ans;

inline

bool pd(int i,int j)

intmain()

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

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

for(int k=0;k<4;k++)

printf("%d

",ans-dinic());

return0;

}

P2774 方格取數問題

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

P2774 方格取數問題

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

P2774 方格取數問題

對棋盤黑白染色,源點向黑點連邊,匯點向白點連邊,權值均為這個點的權值。然後所有的黑點向白點連一條 inf 的邊。這樣求出的最小割一定會割掉與源點和匯點相連的邊,割掉這條邊相當於不選這個點。所以最後答案就是所有點的權值 最小割。include include include include defin...