先對棋盤黑白染色(這是常見套路),我們發現,如果選了乙個黑點,那相鄰的白點就不能選,反之同理
出現了衝突關係,考慮最大權閉合子圖
把黑點看成正權點,白點看成負權點,黑點向相鄰白點連邊,跑最大權閉合子圖即可
#include#include#include#include#define maxc 205
#define maxn 50005
#define maxm 500005
#define inf 0x3f3f3f3f
using namespace std;
int n,m;
int a[maxc][maxc];
int mark[maxc][maxc];
struct edgee[maxm<<1];
int sz=1;
int head[maxn];
void add_edge(int u,int v,int w)
int deep[maxn];
bool bfs(int s,int t)}}
return 0;
}int dfs(int x,int t,int minf)
}return minf-rest;
}int dinic(int s,int t)
return maxflow;
}inline int get_id(int x,int y)
const int walkx[4]=;
const int walky[4]=;
int main()
} int s=0,t=n*m+1;
for(int i=1;i<=n;i++)
} for(int i=1;i<=n;i++) } }
} }printf("%d\n",sum-dinic(s,t));
}
網路流24題 方格取數
p2774 傳送門 方格取數和最大且要求兩兩沒有公共邊 遇到方格內的不相鄰問題,考慮黑白染色來對點分類 問題轉化為使黑點不和白點相鄰的最小代價,其中每個點的代價只計算一次 明顯的集合劃分模型,用最小割解決 include using namespace std define x first defi...
網路流 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的白...