p2774 傳送門
方格取數和最大且要求兩兩沒有公共邊
遇到方格內的不相鄰問題,考慮黑白染色來對點分類
問題轉化為使黑點不和白點相鄰的最小代價,其中每個點的代價只計算一次
明顯的集合劃分模型,用最小割解決:
$,,$
#include usingnamespace
std;
#define x first
#define y secondtypedef
long
long
ll;typedef pair
p;const
int maxn=1e5+10,inf=1
<<30
;int n,m,dat[105][105
],sum;
namespace
maxflow
e[maxn<<2
];
int s,t,head[maxn],iter[maxn],dist[maxn],tot=-1
;
void add_edge(int
from,int to,int
cap)
bool
bfs()
}return dist[t]!=-1
; }
int dfs(int v,int
f)
return
ret;
}intdinic()
return
ret;
}}using
namespace
maxflow;
int dx=,dy=;
int idx(int x,int y)
intmain()
}printf("%d
",sum-dinic());
return0;
}
網路流24題 方格取數
先對棋盤黑白染色 這是常見套路 我們發現,如果選了乙個黑點,那相鄰的白點就不能選,反之同理 出現了衝突關係,考慮最大權閉合子圖 把黑點看成正權點,白點看成負權點,黑點向相鄰白點連邊,跑最大權閉合子圖即可 include include include include define maxc 205 ...
網路流 24題 方格取數
方格取數問題 題目描述 在乙個有m n個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意2個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。輸入格式 檔案第1行有2個正整數m和n,分別表示棋盤的行數和列數。接下來的m行,每行有n個正整數,表示棋盤方格中的數。...
24題 方格取數問題 網路流
在乙個有 n m n times m n m 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意 2 個數所在方格沒有公共邊,且取出的數的總和最大。這道題明顯是乙個二分圖。我們可以把每個點染色,將i j i ji j為偶數的點連向t tt,否則連向s ss。那麼對於每乙個連s ss的白...