BZOJ 3175: [Tjoi2013]攻击装置 二分图最大独立集
2017-05-25 16:27
435 查看
3175: [Tjoi2013]攻击装置
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1106 Solved: 540
[Submit][Status][Discuss]
Description
给定一个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)求在装置互不攻击的情况下,最多可以放置多少个装置。
Input
第一行一个整数N,表示矩阵大小为N*N。接下来N行每一行一个长度N的01串,表示矩阵。Output
一个整数,表示在装置互不攻击的情况下最多可以放置多少个装置。Sample Input
3010
000
100
Sample Output
4HINT
100%数据 N<=200显然我们在求二分图最大独立集
我们都知道最大独立集一般用在二分图里…所以把每个点看作两个点,一个是从它出发,一个是抵达它。实际操作的时候因为会连正反边,不需要进行拆点。最大独立集==总点数-最大二分图匹配/2
#include<cmath> #include<ctime> #include<cstdio> #include<cstdlib> #include<cstring> #include<complex> #include<iostream> #include<algorithm> #include<iomanip> #include<vector> #include<string> #include<queue> #include<set> #include<map> using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} return f*x; } const int N=210; int n,m,ecnt,last[N*N],book[N*N],match[N*N],sum,xx[8]={-1,-2,1,2,-2,-1,2,1},yy[8]={2,1,-2,-1,-1,-2,1,2}; bool a ; struct EDGE{int to,nt;}e[N*N<<5]; inline void add(int u,int v) {e[++ecnt]=(EDGE){v,last[u]};last[u]=ecnt;} inline int getpos(int x,int y) {return (x-1)*n+y;} bool hungary(int u) { for(int i=last[u];i;i=e[i].nt) if(book[e[i].to]!=sum) { book[e[i].to]=sum; if(!match[e[i].to]||hungary(match[e[i].to])) { match[e[i].to]=u; return 1; } } return 0; } int main() { n=read();char s[230];int ans=0; for(int i=1;i<=n;i++) { scanf("%s",s); for(int j=0;j<n;j++)a[i][j+1]=s[j]-'0'; } for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) { if(a[i][j])continue; for(int k=0;k<8;k++) { int x=i+xx[k],y=j+yy[k];//cout<<i<<" "<<j<<" "<<x<<" "<<y<<endl; if(x<1||y<1||x>n||y>n||a[x][y])continue; add(getpos(i,j),getpos(x,y)); } } for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(!a[i][j]) {sum++;if(hungary(getpos(i,j)))ans++;} printf("%d\n",sum-(ans>>1)); return 0; } /* 3 010 000 100 */
相关文章推荐
- 【bzoj3175】 TJOI2013攻击装置 二分图最大独立集
- [二分图最大独立集][BZOJ 3175][TJOI 2013]攻击装置
- 【bzoj3175】【TJOI2013】【攻击装置】【二分图最大独立集】
- 【最大独立集】BZOJ3175- [Tjoi2013]攻击装置
- BZOJ 3175 Tjoi2013 攻击装置 二分图最大匹配
- bzoj 3175: [Tjoi2013]攻击装置 最大独立集 网络流
- BZOJ 3175 [Tjoi2013]攻击装置 二分图极大点独立集
- [二分图最大独立集] bzoj3175: [Tjoi2013]攻击装置
- bzoj 3175 攻击装置 | 二分图最大独立集
- bzoj3175 [Tjoi2013]攻击装置(二分图最大点独立集)
- BZOJ_3175_[Tjoi2013]攻击装置_二分图匹配
- bzoj 3175: [Tjoi2013]攻击装置
- BZOJ3175: [Tjoi2013]攻击装置
- bzoj3175[Tjoi2013] 攻击装置
- BZOJ3175 Tjoi2013 攻击装置(二分图匹配)
- 【bzoj4808】马&&【bzoj3175】[Tjoi2013]攻击装置
- BZOJ3175 Tjoi2013 攻击装置(二分图匹配)
- BZOJ 3175: [Tjoi2013]攻击装置( 匈牙利 )
- bzoj 3175: [Tjoi2013]攻击装置
- [bzoj 3175--TJOI2013]攻击装置