【bzoj 1059】矩阵游戏(二分图最大匹配)
来源:互联网 发布:福建工程网络教学平台 编辑:程序博客网 时间:2024/04/26 23:49
传送门biu~
题意可以转化成:对于第i行,若有黑格子(i,j),则可以让第i行和第j列匹配。若第i行与第j列匹配,则其它行不能和第j列匹配。问是否可以使所有的行都匹配上。
可以建一个二分图,两排2*n个节点。第一排表示n行,第二排表示n列。如果(i,j)是黑格子则连一条i行到j列的边,跑二分图最大匹配,如果匹配数为n则说明关卡有解。
#include<bits/stdc++.h>#define S (2*n+1)#define T (2*n+2)using namespace std;int n,t;int fir[505],dep[505];int head[505],nex[100005],to[100005],cap[100005],tp;inline void add(int x,int y){ nex[++tp]=head[x]; head[x]=tp; to[tp]=y; cap[tp]=1; nex[++tp]=head[y]; head[y]=tp; to[tp]=x; cap[tp]=0;}int dfs(int x,int now){ int c=0; if(x==T || !now) return now; for(int &i=fir[x];i;i=nex[i]){ if(dep[to[i]]!=dep[x]+1 || !cap[i]) continue; int f=dfs(to[i],min(now,cap[i])); now-=f; c+=f; cap[i]-=f; cap[i^1]+=f; if(!now) break; } return c;}queue<int>q;int bfs(){ memset(dep,0,sizeof(dep)); q.push(S);dep[S]=1; while(!q.empty()){ int x=q.front();q.pop(); for(int i=head[x];i;i=nex[i]){ if(cap[i] && !dep[to[i]]){ dep[to[i]]=dep[x]+1; q.push(to[i]); } } } return dep[T];}inline int Dinic(){ int c=0; while(bfs()){ for(int i=1;i<=2*n+2;++i) fir[i]=head[i]; c+=dfs(S,n); } return c;}int main(){ scanf("%d",&t); while(t--){ memset(head,0,sizeof(head));tp=1; scanf("%d",&n); for(int i=1;i<=n;++i) add(S,i),add(n+i,T); for(int i=1;i<=n;++i){ for(int j=1;j<=n;++j){ int x; scanf("%d",&x); if(x) add(i,n+j); } } if(Dinic()==n) printf("Yes\n"); else printf("No\n"); } return 0;}
阅读全文
0 0
- BZOJ 1059 矩阵游戏 (二分图最大匹配)
- BZOJ 1059-矩阵游戏(二分图最大匹配)
- 【bzoj 1059】矩阵游戏(二分图最大匹配)
- BZOJ 1059 矩阵游戏 二分图最大匹配
- BZOJ 1059 矩阵游戏 (二分图最大匹配) (匈牙利算法)
- BZOJ 1059 矩阵游戏 二分图匹配
- BZOJ 1059 矩阵游戏(二分图匹配,匈牙利算法)
- [省选前题目整理][BZOJ 1059][ZJOI 2007]矩阵游戏(二分图最大匹配)
- 最大匹配 BZOJ 1059: [ZJOI2007]矩阵游戏
- bzoj 1059: [ZJOI2007]矩阵游戏|二分图匹配|匈牙利算法
- BZOJ 1059: [ZJOI2007]矩阵游戏 二分图匹配
- BZOJ 1059 矩阵游戏【二分图完美匹配】经典题
- BZOJ 1059 [ZJOI2007]矩阵游戏 二分图匹配
- BZOJ 1059: [ZJOI2007]矩阵游戏 二分图匹配
- BZOJ 1059: [ZJOI2007]矩阵游戏 二分图匹配
- bzoj 1059: [ZJOI2007]矩阵游戏(二分匹配)
- 【二分图最大匹配】矩阵游戏
- 【二分图最大匹配】[SCOI2010] 游戏 BZOJ 1854
- Java中Lambda表达式的使用
- deepmind_lab 要用到的有pip----Python_X64_2.7.12_AnXia.zip下载
- [2017.11.18]集合常见方法
- 【我的Java笔记】Map集合(双列集合)
- 汉诺塔问题进阶
- 【bzoj 1059】矩阵游戏(二分图最大匹配)
- Ubuntu 16.04 安装 google chrome
- 04-高并发业务接口开发思路(实战)
- MSSQL Group by 年月日
- js_statement
- hadoop完全分布式环境启动步骤说明
- 物体检测 DSOD论文 1708.01241的翻译
- ML基础---决策树的应用
- linux 工具