uva11082 Matrix Decompressing
网络流
首先算出每行每列的数的和。
每行的值减去c,每列的值减去R
然后每行和每列之间连边,容量为19.
这样一来,(i,j)的流量相当于(i,j)的值-1.
这样就避免了流量为0不对应答案的尴尬情况。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1000 + 10;
const int maxm = 100000 + 10;
const int inf = 0x3f3f3f3f; int g[maxn],v[maxm],nex[maxm],f[maxm],eid;
int gap[maxn],d[maxn],vid;
int n,m,S,T;
int a[maxn],b[maxn];
int res[maxn][maxn]; void addedge(int a,int b,int F) {
v[eid]=b; f[eid]=F; nex[eid]=g[a]; g[a]=eid++;
v[eid]=a; f[eid]=0; nex[eid]=g[b]; g[b]=eid++;
} void build() {
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=n;i>=1;i--) a[i]-=a[i-1];
for(int i=n+1;i<=n+m;i++) scanf("%d",&b[i]);
for(int i=n+m;i>=n+1;i--) b[i]-=b[i-1];
memset(g,-1,sizeof(g)); eid=0;
S=n+m+1; T=n+m+2; vid=n+m+2;
for(int i=1;i<=n;i++) {
addedge(S,i,a[i]-m);
}
for(int i=n+1;i<=n+m;i++) {
addedge(i,T,b[i]-n);
}
for(int i=1;i<=n;i++)
for(int j=n+1;j<=n+m;j++) {
addedge(i,j,19);
}
} int ISAP(int u,int flow) {
if(u==T) return flow;
int cur=0,aug,mindist=vid; for(int i=g[u];~i;i=nex[i]) if(f[i] && d[u]==d[v[i]]+1) {
aug=ISAP(v[i],min(flow-cur,f[i]));
cur+=aug;
f[i]-=aug;
f[i^1]+=aug;
if(cur==flow || d[S]>=vid) return cur;
} if(cur==0) {
if(!--gap[d[u]]) {
d[S]=vid;
return cur;
}
for(int i=g[u];~i;i=nex[i]) if(f[i])
mindist=min(mindist,d[v[i]]);
++gap[d[u]=mindist+1];
}
return cur;
} void solve() {
memset(d,0,sizeof(d));
memset(gap,0,sizeof(gap));
gap[0]=vid;
while(d[S]<vid) { ISAP(S,inf);
}
for(int u=1;u<=n;u++) {
for(int i=g[u];~i;i=nex[i]) res[u][v[i]]=20-f[i];
}
for(int i=1;i<=n;i++) {
for(int j=n+1;j<n+m;j++)
printf("%d ",res[i][j]);
printf("%d\n",res[i][n+m]);
}
} int main() {
int T;
scanf("%d",&T);
for(int i=1;i<=T;i++) {
if(i>1) printf("\n");
printf("Matrix %d\n",i);
build();
solve();
}
return 0;
}
uva11082 Matrix Decompressing的更多相关文章
- UVA11082 Matrix Decompressing 最大流建模解矩阵,经典
/** 题目:UVA11082 Matrix Decompressing 链接:https://vjudge.net/problem/UVA-11082 题意:lrj入门经典P374 已知一个矩阵的行 ...
- UVA-11082 Matrix Decompressing(有上下界的最大流)
题目链接: Matrix Decompressing 题意: 给一个矩阵的每行和每列的和,(给的是前i行或者列的和); 矩阵中每个元素的值在1到20之间,找出这样的一个矩阵: 思路: 把它转化成一个二 ...
- UVa11082 Matrix Decompressing(最小费用最大流)
题目大概有一个n*m的矩阵,已知各行所有数的和的前缀和和各列所有数的和的前缀和,且矩阵各个数都在1到20的范围内,求该矩阵的一个可能的情况. POJ2396的弱化版本吧..建图的关键在于: 把行.列看 ...
- UVA-11082 Matrix Decompressing (网络流建模)
题目大意:给出一个由1到20组成的整数矩阵的每一行和每一列的和,构造这个矩阵.输出任意一个构造方案. 题目分析:将每一行视作一个点x,将每一列视作一个点y.对于矩阵中的每一个格子,都对应一个二元关系& ...
- UVa 11082 Matrix Decompressing(最大流)
不想吐槽了..sample input 和sample output 完全对不上...调了一个晚上...不想说什么了... -------------------------------------- ...
- uva Matrix Decompressing (行列模型)
Matrix Decompressing 题目: 给出一个矩阵的前i行,前j列的和.要求你求出满足的矩阵. 矩阵的数范围在[1,20]. 一開始就坑在了这里.没读细致题目. 囧... 事 ...
- UVA - 11082 Matrix Decompressing
2. B - Matrix Decompressing 题意:定义一个R*C的正整数矩阵(1<=R,C<=20),设Ai为前i行所有元素之和,Bi为前i列所有元素之和. 题目已知R,C和数 ...
- 【UVA11082】Matrix Decompressing(有上下界的网络流)
题意:给出一个矩阵前i列所有元素的和,和前j行所有元素的和,求这个矩阵解压以后的原型.(答案不唯一) n,m<=20,1<=a[i,j]<=20 思路:这道题把边上的流量作为原先矩阵 ...
- UVA11082:Matrix Decompressing
题意:给定一个矩阵的前i行的和,以及前i列的和,求任意一个满足条件的矩阵,矩阵元素在[1,20] 矩阵行列<=20 题解:做一个二分图的模型,把行列拆开,然后设源点到行节点的容量就是该行所有元素 ...
随机推荐
- centos架设FTP服务器
1.安装vsftp在这里,我们架设的是虚拟用户,所谓虚拟用户就是没有使用真实的帐户,只是通过某种手段达到映射帐户和设置权限的目的.yum -y install vsftpd在CentOS中,这样就可以 ...
- LR中错误代号为27796的解决方法
问题: 曾经遇到过一个问题,在一次性能测试过程中,使用http协议的多用户向服务器发送请求.设置了持续时间,出现错误为:27796, Failed to connect to server 'ho ...
- C# 将list<>泛型集合 转化为 DataTable
使用案例:将页面easy ui 中datagrid表格中的数据,存成json字符串, 通过ajax和ashx传入C#将string类型的json字符串解析成list<>泛型集合, 由于业务 ...
- JavaScript 常用方法总结
经常使用的 JS 方法,今天记下,以便以后查询 /* 手机类型判断 */ var BrowserInfo = { userAgent: navigator.userAgent.toLowerCase( ...
- [ 转载]JAVA Socket超时浅析
JAVA Socket超时浅析 转载自 http://blog.csdn.net/sureyonder/article/details/5633647 套接字或插座(socket)是一种软件形 式的抽 ...
- MyBatis对不同数据库的主键生成策略
本文转自:http://289972458.iteye.com/blog/1001851 http://hi.baidu.com/zim_it/blog/item/8a2bd11205f5b56ec ...
- 360随身wifi怎样购买?360随身wifi怎样预约?
---恢复内容开始--- 360随身wifi怎样购买 想要购买360随身Wifi,可以登录360随身Wifi的官网wifi.360.cn,或者直接登陆京东商城进行购买,售价为19.9元,分黑.白两色. ...
- 1054: [HAOI2008]移动玩具 - BZOJ
Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动时只能将玩具向上下左右四个方向移动,并且移动的位置不能有玩具,请你用最少的移动 ...
- 分析Hibernate的事务处理机制
Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的 Transaction实际上是底层的JDBC Transactio ...
- python url编码
1.quote:使用适合URL内容的转义序列替换String中的特殊字符. 2.quote_plus:调用quote并使用“+”替换所有空格 3.unquote:使用转义字符的单字符对应物替换'%xx ...