BZOJ3175 Tjoi2013 攻擊裝置

2022-03-29 17:44:49 字數 1190 閱讀 4384

bzoj3175: [tjoi2013]攻擊裝置

給定乙個01矩陣,其中你可以在0的位置放置攻擊裝置。每乙個攻擊裝置(x,y)都可以按照「日」字攻擊其周圍的 8個位置(x-1,y-2),(x-2,y-1),(x+1,y-2),(x+2,y-1),(x-1,y+2),(x-2,y+1), (x+1,y+2),(x+2,y+1)

求在裝置互不攻擊的情況下,最多可以放置多少個裝置。

第一行乙個整數n,表示矩陣大小為n*n。接下來n行每一行乙個長度n的01串,表示矩陣。

乙個整數,表示在裝置互不攻擊的情況下最多可以放置多少個裝置。

3010

000100

4100%資料 n<=200

題目要求最大獨立集。

我們有:

$$\text=\text-\text$$

於是只要求最大匹配數即可。

於是就丟給了匈牙利。。。

注意:因為$a$匹配了$b$,$b$就會匹配$a$。

所以最後的最大匹配數需要除以$2$。

附**:

#include#include#include#include#define maxn 210

using namespace std;

const int fx[4]=;

const int fy[4]=;

int n,m=0,t,c=1;

int head[maxn*maxn],vis[maxn*maxn],f[maxn*maxn],id[maxn][maxn];

struct edgea[maxn*maxn*20];

inline int read()

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

return date*w;

}inline void add(int x,int y)

inline bool check(int x,int y)

bool find(int x)

} return false;

}void work()

printf("%d\n",m-ans/2);

}void init()

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

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

if(id[i][j])

for(int k=0;k<4;k++)

}int main()

Bzoj 3175 Tjoi2013 攻擊裝置

給定乙個01矩陣,其中你可以在0的位置放置攻擊裝置。每乙個攻擊裝置 x,y 都可以按照 日 字攻擊其周圍的 8個位置 x 1,y 2 x 2,y 1 x 1,y 2 x 2,y 1 x 1,y 2 x 2,y 1 x 1,y 2 x 2,y 1 求在裝置互不攻擊的情況下,最多可以放置多少個裝置。第一...

BZOJ3175 Tjoi2013 攻擊裝置

給 定乙個01矩陣,其中你可以在0的位置放置攻擊裝置。每乙個攻擊裝置 x,y 都可以按照 日 字攻擊其周圍的 8個位置 x 1,y 2 x 2,y 1 x 1,y 2 x 2,y 1 x 1,y 2 x 2,y 1 x 1,y 2 x 2,y 1 求在裝置互不攻擊的情況下,最多可以放置多少個裝置。第...

BZOJ5334 Tjoi2018 數學計算

time limit 10 sec memory limit 256 mb submit 234 solved 155 小豆現在有乙個數x,初始值為1.小豆有q次操作,操作有兩種型別 1 m x x m 輸出 x mod 2 pos x x 第pos次操作所乘的數 保證第pos次操作一定為型別1,對...