給出一張邊長為n,有幾個障礙點的棋盤,問最多可以放幾個騎士使他們不互相攻擊.
我們可以反過來考慮,先將棋盤放滿騎士,計算至少去掉幾個騎士.
經過觀察,我們可以發現,相同顏色的格仔上的棋子無法相互攻擊,因此可以讓超級源點連想每乙個紅點,每乙個黃點連向超級匯點,流量均為一,表示將棋盤放滿,再將紅格仔向可以攻擊到的格仔連一條邊,流量為inf,如果有流量通過某個點,就說明這個點不放棋子,因此計算這張圖的最小割也就是最大流就能算出至少要拿掉幾個棋子,用總棋子數減掉這個值即可.
#include
#include
#include
#include
#define zh(x,y) ((x-1)*n+y)
#define n 50010
#define inf 0x3f3f3f3f
using
namespace
std;
int bb=1,n,m,first[n],dir[8][2]= ,s,t,ans,deep[n],cur[n];
bool mm[210][210];
struct bn
bn[n*20];
queue
que;
inline
void add(int u,int v,int w)
inline
void ad(int u,int v,int w)
inline
bool bfs()
}return deep[t];
}int dfs(int now,int mn)
}return0;}
int main()
for(i=1; i<=n; i++)
}else}}
for(; bfs();)
cout
<}
P3355 騎士共存問題
題目描述 在乙個 n n個方格的西洋棋棋盤上,馬 騎士 可以攻擊的棋盤方格如圖所示。棋盤上某些方格設定了障礙,騎士不得進入 對於給定的 n n 個方格的西洋棋棋盤和障礙標誌,計算棋盤上最多可以放置多少個騎士,使得它們彼此互不攻擊 輸入格式 第一行有 2 個正整數n 和 m 1 n 200,0 m輸出...
P3355 騎士共存問題
在乙個n n個方格的西洋棋棋盤上,馬 騎士 可以攻擊的棋盤方格如圖所示。棋盤上某些方格設定了障礙,騎士不得進入 對於給定的n n 個方格的西洋棋棋盤和障礙標誌,計算棋盤上最多可以放置多少個騎士,使得它們彼此互不攻擊 輸入格式 第一行有 2 個正整數n 和 m 1 n 200,0 m輸出格式 將計算出...
洛谷P3355 騎士共存問題(最小割)
傳送門 de了兩個小時的bug愣是沒發現錯在 沒辦法只好重打了一遍竟然1a 我有點想從這裡跳下去了 和方格取數問題差不多,把格仔按行數和列數之和的奇偶性分為黑的和白的,可以發現某種顏色一定只能走到另一種顏色。那麼考慮對所有為奇的黑點,偶的為白點,源點對所有黑點連邊,所有白點對匯點連邊,容量都為 1 ...