Luogu P3355騎士共存問題(最小割)

2022-05-01 01:21:10 字數 1425 閱讀 3025

題目鏈結

像題面那樣把棋盤染成紅黃點。發現騎士邁一步能到達的點的顏色一定是跟他所在的格仔的顏色不同的。於是(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,有幾個障礙點的棋盤,問最多可以放幾個騎士使他們不互相攻擊.我們可以反過來考慮,先將棋盤放滿騎士,計算至少去掉幾個騎士.經過觀察,我們可以發現,相同顏色的格仔上的棋子無法相互攻擊,因此可以讓超級源點連想每乙個紅點,每乙個黃點連向超級匯點,流量均為一,表示將棋盤放滿,再將紅格仔向可以攻...