P3355 騎士共存問題

2022-05-16 01:03:53 字數 1304 閱讀 7826

在乙個n\(*\)n個方格的西洋棋棋盤上,馬(騎士)可以攻擊的棋盤方格如圖所示。棋盤上某些方格設定了障礙,騎士不得進入!

對於給定的n\(*\)n 個方格的西洋棋棋盤和障礙標誌,計算棋盤上最多可以放置多少個騎士,使得它們彼此互不攻擊

輸入格式:

第一行有 2 個正整數n 和 m (1<=n<=200, 0<=m輸出格式:

將計算出的共存騎士數輸出

二分圖的最大獨立集問題,因為黃點只能攻擊黃點,而紅點只能攻擊紅點

我們先考慮黑白染色

(i+j)&1即黃色染黑,其餘點染白。因為我們能相互攻擊的點一定是在二分圖兩側,然後能攻擊的點連邊跑最大流就好了

#include#define inf 0x3f3f3f3f

using namespace std;

const int maxn=400+10,maxm=1000000+100;

int head[maxn*maxn],dis[maxn*maxn],mark[maxn][maxn],vis[maxn*maxn];

int cur[maxn*maxn];

int s,t,n,m,size=1;

int dx=,dy=;

struct edge

e[maxm];

void addedge(int u,int v,int val)

inline int read()

while(ch<='9'&&ch>='0')

return x*f;

}int id(int i,int j)

bool bfs(int s)

} }return dis[t];

}int dinic(int u,int f)

} }return 0;

}int maxflow()

} return flow;

}int main()

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

}else addedge(u,t,1);

}printf("%d",n*n-m-maxflow());

return 0;

}

P3355 騎士共存問題

題目描述 在乙個 n n個方格的西洋棋棋盤上,馬 騎士 可以攻擊的棋盤方格如圖所示。棋盤上某些方格設定了障礙,騎士不得進入 對於給定的 n n 個方格的西洋棋棋盤和障礙標誌,計算棋盤上最多可以放置多少個騎士,使得它們彼此互不攻擊 輸入格式 第一行有 2 個正整數n 和 m 1 n 200,0 m輸出...

洛谷 P3355 騎士共存問題

給出一張邊長為n,有幾個障礙點的棋盤,問最多可以放幾個騎士使他們不互相攻擊.我們可以反過來考慮,先將棋盤放滿騎士,計算至少去掉幾個騎士.經過觀察,我們可以發現,相同顏色的格仔上的棋子無法相互攻擊,因此可以讓超級源點連想每乙個紅點,每乙個黃點連向超級匯點,流量均為一,表示將棋盤放滿,再將紅格仔向可以攻...

P3355 騎士共存問題 網路流

在乙個 n n個方格的西洋棋棋盤上,馬 騎士 可以攻擊的棋盤方格如圖所示。棋盤上某些方格設定了障礙,騎士不得進入 對於給定的 n n 個方格的西洋棋棋盤和障礙標誌,計算棋盤上最多可以放置多少個騎士,使得它們彼此互不攻擊 和方格取數一模一樣 只不過相鄰改成了日字 所有的權值都為1 主要要減去m個障礙 ...