bzoj1059: [ZJOI2007]矩阵游戏 二分图
2014-12-19 17:23
344 查看
简单二分图,把行和列看做两个几何,分别连边即可。第一发竟然搞错入度了,可惜没有1A,
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <queue> #include <cmath> using namespace std; #define INF 0x3fffffff #define maxn 800 typedef long long sint; struct node { int v,c,next; }e[222222]; int q[999999]; int first[maxn],n,m,dis[maxn],st,ed,en; void init() { en=0; memset(first,-1,sizeof(first)); st=0; ed=n*2+1; } void add(int a,int b,int c) { e[en].v=b; e[en].c=c; e[en].next=first[a]; first[a]=en; en++; e[en].v=a; e[en].c=0; e[en].next=first[b]; first[b]=en; en++; } bool bfs() { memset(dis,-1,sizeof(dis)); int tail=1; int head=1; tail++; q[tail]=st; dis[st]=0; while(head<tail) { head++; int u=q[head]; for(int i=first[u];i!=-1;i=e[i].next) { if(!e[i].c||dis[e[i].v]!=-1) continue; dis[e[i].v]=dis[u]+1; if(e[i].v==ed){return true;} tail++; q[tail]=e[i].v; } } return false; } int dfs(int x,int mx) { if(x==ed||mx==0) return mx; int f,flow=0,v,ret=0; for(int i=first[x];i!=-1;i=e[i].next) { v=e[i].v; if(dis[x]+1!=dis[v]) continue; if((f=dfs(v,min(mx,e[i].c)))) { e[i].c-=f; e[i^1].c+=f; flow+=f; ret+=f; mx-=f; if(!mx) break; } } if(ret==0) dis[x]=-1; return flow; } int dinic() { int tmp=0,maxflow=0; while(bfs()) { while((tmp=dfs(st,INF))) maxflow+=tmp; } return maxflow; } void build() { int a,b,c; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d",&a); if(a) { add(j,i+n,1); } } } for(int i=1;i<=n;i++) { add(st,i,1); add(i+n,ed,1); } } int main() { int cas,flag; scanf("%d",&cas); while(cas--) { flag=1; scanf("%d",&n); init(); build(); if(dinic()!=n) { flag=0; } if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- [bzoj1059][ZJOI2007]矩阵游戏_二分图最大匹配
- BZOJ 1059 [ZJOI2007]矩阵游戏 (二分图最大匹配)
- [二分图最大匹配] BZOJ1059: [ZJOI2007]矩阵游戏
- BZOJ1059(ZJOI2007)[矩阵游戏]--二分图最大匹配
- bzoj1059 [ZJOI2007]矩阵游戏(二分图完美匹配)
- BZOJ1059 / ZJOI2007 矩阵游戏【网络流/二分图】
- [bzoj 1059][ZJOI 2007]矩阵游戏(二分图最大匹配)
- 【bzoj1059】[ZJOI2007]矩阵游戏 二分图最大匹配
- [省选前题目整理][BZOJ 1059][ZJOI 2007]矩阵游戏(二分图最大匹配)
- 【BZOJ】1059: [ZJOI2007]矩阵游戏(二分图匹配)
- BZOJ 1059: [ZJOI2007]矩阵游戏 二分图匹配
- bzoj 1059: [ZJOI2007]矩阵游戏【匈牙利算法】
- BZOJ 1059 [ZJOI2007]矩阵游戏 二分图匹配
- bzoj 1059: [ZJOI2007]矩阵游戏
- BZOJ 1059 [ZJOI2007]矩阵游戏
- bzoj1059[ZJOI2007]矩阵游戏
- BZOJ 1059: [ZJOI2007]矩阵游戏 二分图匹配
- 【匈牙利算法】BZOJ1059-[ZJOI2007]矩阵游戏
- bzoj 1059: [ZJOI2007]矩阵游戏(二分匹配)
- bzoj1059: [ZJOI2007]矩阵游戏