P3355 騎士共存問題 網路流

2022-05-01 15:48:11 字數 2173 閱讀 9986

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

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

和方格取數一模一樣  

只不過相鄰改成了日字  所有的權值都為1 

主要要減去m個障礙

#includeusing

namespace

std;

//input by bxd

#define rep(i,a,b) for(int i=(a);i<=(b);i++)

#define repp(i,a,b) for(int i=(a);i>=(b);--i)

#define ri(n) scanf("%d",&(n))

#define rii(n,m) scanf("%d%d",&n,&m)

#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)

#define rs(s) scanf("%s",s);

#define ll long long

#define pb push_back

#define rep(i,n) for(int i=0;i

#define clr(a,v) memset(a,v,sizeof a)

/////////////////////////////////

/#define inf 0x3f3f3f3f

const

int n=4e5+44

; const

int m=4e6+54

;struct

edge e[m

<< 1

];int head[n], cnt = 1

;void add(int x, int y, int

z) ;

head[x] =cnt;

e[++cnt] = (edge);

head[y] =cnt;

}int

level[n];

bool bfs(int s, int

t) }

return

level[t];

}int dfs(int s, int t, int

flow)

}if (!ret) level[s] = 0

;

return

ret;

}int dinic(int s, int

t) int

n,m,s,t;

int id(int x,int

y)int mp[205][205

];int dx=;

int dy=;

intmain()

rep(i,

1,n)

rep(j,

1,n)

if(!mp[i][j])}}

else add(id(i,j),t,1

); }

cout

}

view code

也可以用二分圖匹配來做  但是 會t一些點 (只是介紹思路)

求的是最大獨立集團點數  = n - 最大匹配數!

#include using

namespace

std;

const

int n = 206

;const

int dx[8] = ;

const

int dy[8] = ;

int n, m, ans, f[n][n][2

];bool

a[n][n], v[n][n];

inline

bool dfs(int x, int

y) }

return0;

}int

main()

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

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

cout

<< n * n - m - ans <

return0;

}

view code

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