UVA 11082 (最大流)
来源:互联网 发布:电视机看电视软件 编辑:程序博客网 时间:2024/05/01 19:53
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <vector>#include <queue>using namespace std;#define INF 11111111#define maxn 111#define maxm 4111int n, m;int s, t;struct Edge{ int from, to,next,cap,flow; void get(int u,int a,int b,int c,int d) { from = u; to = a; next = b; cap = c; flow = d; }}edge[maxm];int tol;int head[maxn];int gap[maxn],dep[maxn],pre[maxn],cur[maxn];void init(){ tol=0; memset(head,-1,sizeof(head));}void add_edge(int u,int v,int w,int rw=0){ edge[tol].get(u, v,head[u],w,0);head[u]=tol++; edge[tol].get(v, u,head[v],rw,0);head[v]=tol++;}int sap(int start,int end,int N){ memset(gap,0,sizeof(gap)); memset(dep,0,sizeof(dep)); memcpy(cur,head,sizeof(head)); int u=start; pre[u]=-1; gap[0]=N; int ans=0; while(dep[start]<N) { if(u==end) { int Min=INF; for(int i=pre[u];i!=-1;i=pre[edge[i^1].to]) if(Min>edge[i].cap-edge[i].flow) Min=edge[i].cap-edge[i].flow; for(int i=pre[u];i!=-1;i=pre[edge[i^1].to]) { edge[i].flow+=Min; edge[i^1].flow-=Min; } u = start; ans+=Min; continue; } bool flag=false; int v; for(int i=cur[u];i !=-1;i=edge[i].next) { v=edge[i].to; if(edge[i].cap-edge[i].flow&&dep[v]+1==dep[u]) { flag=true; cur[u]=pre[v]=i; break; } } if(flag) { u=v; continue; } int Min=N; for(int i=head[u];i!=-1;i=edge[i].next) if(edge[i].cap-edge[i].flow&&dep[edge[i].to]<Min) { Min=dep[edge[i].to]; cur[u]=i; } gap[dep[u]]--; if(!gap[dep[u]]) return ans; dep[u]=Min+1; gap[dep[u]]++; if(u!=start) u=edge[pre[u]^1].to; } return ans;}int A[maxn], B[maxn];int main () { //freopen ("in.txt", "r", stdin); int tt, kase = 0; scanf ("%d", &tt); while (tt--) { printf ("Matrix %d\n", ++kase); scanf ("%d%d", &n, &m); for (int i = 1; i <= n; i++) { scanf ("%d", &A[i]); } for (int i = 1; i <= m; i++) { scanf ("%d", &B[i]); } for (int i = n; i > 1; i--) { A[i] -= A[i-1]; } for (int i = m; i > 1; i--) { B[i] -= B[i-1]; } init (); s = 0, t = n+1+m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { add_edge (i, j+n, 19); } } for (int i = 1; i <= n; i++) { add_edge (s, i, A[i]-m); } for (int i = 1; i <= m; i++) { add_edge (i+n, t, B[i]-n); } int ans = sap (s, t, n+m+2); //cout << ans << endl; int mp[maxn][maxn]; for (int i = 0; i < 2*n*m; i += 2) mp[edge[i].from][edge[i].to-n] = edge[i].flow+1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { printf ("%d%c", mp[i][j], (j == m ? '\n':' ')); } } printf ("\n"); } return 0;}
0 0
- UVA 11082 (最大流)
- UVa 11082 Matrix Decompressing 最大流
- uva 11082 Matrix Decompressing (最大流)
- Uva 11082 Matrix Decompressing (最大流)
- UVA - 11082(最大流思路题目)
- UVa 11082 - 最大流 基础建模
- 最大流(矩阵解压 uva 11082)
- UVA 11082 Matrix Decompressing(最大流)
- UVA 11082 Matrix Decompressing (最大流)
- uva 10330 最大流
- uva 10330(最大流)
- uva 563(最大流)
- uva 753(最大流)
- UVA 753 (最大流)
- 最大流-UVA
- UVA 563 - Crimewave(最大流)
- UVa 563 - Crimewave 最大流
- UVA - 563 Crimewave【最大流】
- 机房重构—策略模式简单用
- 《活着就为改变世界:史蒂夫.乔布斯转》读书分享
- go语言的string和slice是值拷贝吗?
- 手把手粗糙解析KMP算法
- 关于oracle数据库安装出现 7003/7009
- UVA 11082 (最大流)
- VS 使用过程问题集锦(更新中)
- 面试阿里数据研发岗,无缘三面,谈谈面经
- JQuery实现省份三级下拉框功能(整理)
- MarkDown字体、字号与颜色
- HttpClient在 AndroidStudio中使用
- Python 中的进程、线程、协程、同步、异步、回调
- Cocos2d-x 读取网络图片创建精灵
- 从头到尾彻底解析Hash表算法