bzoj3175 [ TJOI2013 ] -- 二分图最大点独立集
来源:互联网 发布:淘宝购买家具退货 编辑:程序博客网 时间:2024/06/05 23:08
画个图自己走一走,容易看出这是一个二分图。bzoj3175
那么答案就是二分图的最大点独立集。
二分图的最大点独立集=|V|-最大匹配数
最大匹配数用匈牙利算法求。
代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 #define N 210 6 struct Edge{ 7 int t,nx; 8 }e[N*N<<3]; 9 int xx[8]={-1,-2,1,2,-1,-2,1,2};10 int yy[8]={2,1,-2,-1,-2,-1,2,1};11 int i,j,k,x,y,Ans,p,q,n,m,v[N*N],Num,Cnt,a[N][N],c[N*N],h[N*N],Sum;12 bool b[N][N];13 char s[N];14 inline void Add(int x,int y){15 e[++Num].t=y;e[Num].nx=h[x];h[x]=Num;16 }17 inline bool Dfs(int x,int y){18 if(v[x]==y)return 0;v[x]=y;19 for(int i=h[x];i;i=e[i].nx)20 if(c[e[i].t]==0||Dfs(c[e[i].t],y)){21 c[e[i].t]=x;22 return 1;23 }24 return 0;25 }26 int main()27 {28 scanf("%d",&n);29 for(i=1;i<=n;i++){30 scanf("%s",s+1);31 for(j=1;j<=n;j++){32 a[i][j]=++Cnt;33 if(s[j]=='1')b[i][j]=1,Sum++;34 }35 }36 for(i=1;i<=n;i++)37 for(j=1;j<=n;j++)38 if(!b[i][j])39 for(k=0;k<8;k++){40 x=i+xx[k];y=j+yy[k];41 if(x>n||x<1||y>n||y<1||b[x][y])continue;42 Add(a[i][j],a[x][y]);43 }44 for(i=1;i<=Cnt;i++)if(Dfs(i,i))Ans++;45 printf("%d",Cnt-Sum-(Ans>>1));46 return 0;47 }
阅读全文
0 0
- bzoj3175 [ TJOI2013 ] -- 二分图最大点独立集
- 【bzoj3175】 TJOI2013攻击装置 二分图最大独立集
- 【bzoj3175】【TJOI2013】【攻击装置】【二分图最大独立集】
- [bzoj3175] [Tjoi2013]攻击装置(最大独立集)
- BZOJ 3175: [Tjoi2013]攻击装置 二分图最大独立集
- [Tjoi2013]攻击装置 bzoj3175 独立集与特例
- BZOJ3175 Tjoi2013 攻击装置(二分图匹配)
- BZOJ 3175 [Tjoi2013]攻击装置 二分图极大点独立集
- ZOJ1137 二分图的最大独立点集 匈牙利算法
- POJ 3692 - Kindergarten 二分图的最大独立点集
- Poj 3692 Kindergarten 二分图最大独立点集
- BZOJ 4808 二分图最大点独立集
- POJ 3692 二分图最大点独立集 解题报告
- 二分图最大匹配,最小点覆盖,最小路径覆盖,二分图最大独立集
- 二分图最大独立集
- 二分图最大独立集
- 二分图最大独立集
- 二分图----最大匹配,最小点覆盖,最大点独立集
- bzoj2187 -- 类欧几里得算法
- bzoj2712 -- 类欧几里得算法
- 集锦
- bzoj1856 [ SCOI2010 ] -- 卡特兰数
- 10、jQuery插件之artDialog弹窗插件
- bzoj3175 [ TJOI2013 ] -- 二分图最大点独立集
- springAOP advice方法执行两次 解决方法
- bzoj2117 [ 2010国家集训队 ] -- 点分树+二分答案
- bzoj2631 -- LCT
- bzoj1009 [ HNOI2008 ] -- KMP+矩阵乘法加速DP
- bzoj2956 -- 数论分块
- trinity运行原理及常见报错(一)
- bzoj2821 -- 分块
- bzoj3732 -- 最小生成树+倍增