【TJOI2013】攻击装置

【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串,表示矩阵。

【输出】

一个整数,表示在装置互不攻击的情况下最多可以放置多少个装置。

【输入样例】

3
010
000
100

【输出样例】

4

【数据范围】

30%数据N<=50
100%数据 N<=200

【题解】

一眼看出是骑士共存问题,但是没有一次AC,果然我还是蒟蒻到爆ORZ

二分图最大独立集,首先对矩阵黑白染色,然后虚拟一个原点与可用的黑点相连,流量为1,再虚拟一个汇点与可用的白点相连,流量为1。可以发现黑点能攻击的点都是白点,所以所有黑点向可以攻击到的白点连一条流量∞的边,这样就建好图了。

表示这个数据量Hungary是完跪了,Hopcroft-Karp大概能过(蒟蒻写不来XD),高效网络流乱搞什么的就可行了。表示本蒟蒻的Dinic加了各种优化还TLE,最后发现有一个小细节没注意到,修改后就AC了,果然我还是太粗心了(╯﹏╰)

【代码】

Dinic,修改后加上了当前弧优化,速度蛮不错~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值