題目鏈結
像題面那樣把棋盤染成紅黃點。發現騎士邁一步能到達的點的顏色一定是跟他所在的格仔的顏色不同的。於是(woc哪來的於是?這個性質有這麼明顯嗎?)從源點向所有紅點連邊,從所有黃點向匯點連邊,紅點向從它一步能邁到的黃點連邊,然後求出最小割(其實就是最大流啦)用可以站騎士的總點數減去。
網路流構圖好喵啊 一臉懵逼
#include#include#include
#include
#include
#include
#define maxn 80000
using
namespace
std;
inline
long
long
read()
while
(isdigit(ch))
return num*f;
}int
n,m;
inline
int count(int i)
inline
int calc(int x,int y)
int u[9]=;
int w[9]=;
struct
edgeedge[
5*maxn];
int head[maxn*3
],num;
inline
void addedge(int
from,int to,int
val);
head[
from]=num;
}inline
void add(int
from,int to,int
val)
bool vis[maxn*3
];bool ext[500][800
];int list[maxn*3
];int dfn[maxn*3
];int
start,end;
bool
bfs()
}return
vis[end];
}int dfs(int x,int
val)
if(val!=flow) dfn[x]=-1
;
return
flow;
}int
maxflow()
return
ans;
}int
main()
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
}else add(calc(i,j),end,1
); }
int ans=maxflow();
printf("%d
",n*n-m-ans);
}
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 騎士共存問題
給出一張邊長為n,有幾個障礙點的棋盤,問最多可以放幾個騎士使他們不互相攻擊.我們可以反過來考慮,先將棋盤放滿騎士,計算至少去掉幾個騎士.經過觀察,我們可以發現,相同顏色的格仔上的棋子無法相互攻擊,因此可以讓超級源點連想每乙個紅點,每乙個黃點連向超級匯點,流量均為一,表示將棋盤放滿,再將紅格仔向可以攻...