傳送門
考慮一開始把所有點都選了,再放棄一些點使得選擇合法
考慮求出最小的放棄掉的價值
看到棋盤先黑白染色冷靜一下
從 $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...