傳送門
de了兩個小時的bug愣是沒發現錯在**……沒辦法只好重打了一遍竟然1a……我有點想從這裡跳下去了……
和方格取數問題差不多,把格仔按行數和列數之和的奇偶性分為黑的和白的,可以發現某種顏色一定只能走到另一種顏色。那麼考慮對所有為奇的黑點,偶的為白點,源點對所有黑點連邊,所有白點對匯點連邊,容量都為$1$,然後黑點對所有能走到的白點連邊,容量為$inf$,那麼不難發現,要滿足條件就要求出一組割,而因為答案是全部的減去割,所以只要求出最小割即可
1//minamoto
2 #include3 #include4 #include5 #include6
#define inf 0x3f3f3f3f
7using
namespace
std;
8#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)
9char buf[1
<<21],*p1=buf,*p2=buf;
10 inline int
read()
20const
int n=100005,m=500005;21
int dx=,dy=;
22int head[n],next[m],ver[m],edge[m],cur[n],dep[n],tot=1;23
int n,m,s,t,is[505][505
],ans;
24 queueq;
25 inline void add(int u,int v,int
e)29
bool
bfs()42}
43}44return
false;45
}46int dfs(int u,int
limit)56}
57return
flow;58}
59int
dinic()
64int
main()
71for(int i=1;i<=n;++i)
72for(int j=1;j<=n;++j)82}
83else add(id,t,1
);84
}85 printf("
%d\n
",ans-dinic());
86return0;
87 }
洛谷 P3355 騎士共存問題
給出一張邊長為n,有幾個障礙點的棋盤,問最多可以放幾個騎士使他們不互相攻擊.我們可以反過來考慮,先將棋盤放滿騎士,計算至少去掉幾個騎士.經過觀察,我們可以發現,相同顏色的格仔上的棋子無法相互攻擊,因此可以讓超級源點連想每乙個紅點,每乙個黃點連向超級匯點,流量均為一,表示將棋盤放滿,再將紅格仔向可以攻...
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輸出格式 將計算出...