uva 11082
题意:知道矩阵的前i行之和,和前j列之和(任意i和j都可以)。求这个矩阵。每个格子中的元素必须在1~20之间。矩阵大小上限20*20
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#define pb push_back
using namespace std;
const int INF=0x3f3f3f3f;
int ans[][],R,C,r[],c[],A[],B[];
struct EdmondsKarp
{
struct Edge
{
int from,to,cap,flow;
};
vector<Edge>edges;
vector<int>G[];
int p[],a[];
void init()
{
for(int i=;i<;i++)G[i].clear();
edges.clear();
memset(p,,sizeof(p));
}
void addedge(int from,int to,int cap)
{
edges.pb((Edge){from,to,cap,});
edges.pb((Edge){to,from,,});
int m=edges.size();
G[from].pb(m-);
G[to].pb(m-);
}
int maxflow(int s,int t)
{
int flow=;
while()
{
memset(a,,sizeof(a));
queue<int>q;
q.push(s);
a[s]=INF;
while(!q.empty())
{
int x=q.front();
q.pop();
for(int i=;i<G[x].size();i++)
{
Edge& e=edges[G[x][i]];
if(!a[e.to]&&e.cap>e.flow)
{
p[e.to]=G[x][i];
a[e.to]=min(a[x],e.cap-e.flow);
q.push(e.to);
}
}
if(a[t])break;
}
if(!a[t])break;
for(int u=t;u!=s;u=edges[p[u]].from)
{
edges[p[u]].flow+=a[t];
edges[p[u]^].flow-=a[t];
}
flow+=a[t];
}
return flow;
}
void solve()
{
int temp=maxflow(,R+C+);
for(int len=edges.size(),i=;i<len;i+=)
{
Edge& e=edges[i];
if(e.from!=&&e.to!=R+C+)
ans[e.from][e.to-R]=e.flow+;
}
for(int i=;i<=R;i++)
for(int j=;j<=C;j++)
printf(j==C?"%d\n":"%d ",ans[i][j]);
}
}EK;
int main()
{
int T;
scanf("%d",&T);
bool flag=;
for(int kase=;kase<=T;kase++)
{
scanf("%d%d",&R,&C);
EK.init();
for(int i=;i<=R;i++)scanf("%d",&r[i]);
for(int i=;i<=R;i++)A[i]=r[i]-r[i-];
for(int i=;i<=C;i++)scanf("%d",&c[i]);
for(int i=;i<=C;i++)B[i]=c[i]-c[i-];
for(int i=;i<=R;i++)
EK.addedge(,i,A[i]-C);
for(int i=;i<=C;i++)
EK.addedge(i+R,R+C+,B[i]-R);
for(int i=;i<=R;i++)
for(int j=;j<=C;j++)
EK.addedge(i,R+j,);
if(kase>)putchar('\n');
printf("Matrix %d\n",kase);
EK.solve();
}
return ;
}
uva 11082的更多相关文章
- [题解]UVa 11082 Matrix Decompressing
开始眨眼一看怎么也不像是网络流的一道题,再怎么看也觉得像是搜索.不过虽然这道题数据范围很小,但也不至于搜索也是可以随随便便就可以过的.(不过这道题应该是special judge,因为一题可以多解而且 ...
- UVa 11082 Matrix Decompressing - 网络流
开始眨眼一看怎么也不像是网络流的一道题,再怎么看也觉得像是搜索.不过虽然这道题数据范围很小,但也不至于搜索也是可以随随便便就可以过的.(不过这道题应该是special judge,因为一题可以多解而且 ...
- UVa 11082 - Matrix Decompressing(最大流)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 11082 & 最大流的行列模型
题意: 给出一个矩阵前i行的和与前j列的和,(i∈[1,r],j属于[1,c]),每个元素ai,j∈[1,20],请你还原出这个矩阵,保证有解. SOL: 给网络流建模跪了,神一样的建图,如果我我会怎 ...
- UVA 11082 矩阵解压(网络流建模)
矩阵解压 紫书P374 建模真的是挺难的,如果直接给我这题,我是想不到用网络流的,所以还应多做网路流建模,学会如何转化成网络流 还有,现在用的EK算法是比较慢的,还应去看看Dnic和ISAP,并且理解 ...
- UVa 11082 (网络流建模) Matrix Decompressing
网络流不难写,难的建一个能解决问题的模型.. 即使我知道这是网络流专题的题目,也绝不会能想出这种解法,=_=|| 题意: 给出一个矩阵的 前i行和 以及 前i列和,然后找到一个满足要求的矩阵,而且每个 ...
- UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
题意: 知道矩阵的前i行之和,和前j列之和(任意i和j都可以).求这个矩阵.每个格子中的元素必须在1~20之间.矩阵大小上限20*20. 思路: 这么也想不到用网络流解决,这个模型很不错.假设这个矩阵 ...
- 【网络流#5】UVA 11082 最大流
网络流题目最有意思的地方就是构图了,毕竟套模板每个人都会的 现在有一个矩阵,已知前i行元素之和a[i](1<=i<=n),前j列元素之和b[j](1<=j<=m),求一个可行的 ...
- [网络流最大流经典][uva 11082][矩阵解压]
题目大意 分析 #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring ...
随机推荐
- 关于ckeditor ajax提交到后台 问题
ckeditor 提交时 如果有带有html时是提交不了的 解决办法就是 你在提交的时候 将ckeditor获取的只编码(encodeURI) 然后在传到后台提交的时候 在解码 就ok了 ckname ...
- ruby on rails 在centos 7下的安装配置
因为想安装最新版本,所以通过编译安装. 安装前准备工具和库文件: sudo yum install gcc gcc-c++ openssl-devel readline-devel gdbm-deve ...
- 内容生成器:content、计数器、多列
一,内容生成器:content 补充before和after伪类选择器: 1):将内容添加到某个选择器定义的单个或者多个元素的每一个实例之前或者之后 2)与before选择器配合使用(同理大家想下会不 ...
- php工作笔记7-摇动手机,发出请求响应
1.调用
- git乱码问题解决
etc\gitconfig文件中增加以下内容: [gui] encoding = utf-8 [i18n] commitencoding = gbk [svn] pathnam ...
- win10 剪贴板 拒绝访问
win10 Cannot open clipboard:拒绝访问.
- Java实现emf图片自己留转png(jpg)图片字节流
private byte[] emfToPng(InputStream is){ // InputStream inputStream=null; byte[] by=null; EMFInputSt ...
- SQL Server 显示执行一条语句的执行时间
set statistics time on执行语句set statistics time off
- Gvim插件管理Vundle
之前关于gvim的博客中提到的很多插件安装比较繁琐,这一篇来介绍一下gvim管理插件的插件--vundle的安装以及使用,让givm的插件安装更加的简单 首先给出vundle的git地址 https: ...
- CSS的两大重点
一.属性:通过属性的复杂叠加才能做出漂亮的网页 二.选择器:通过选择器找到对应的标签设置样式,选择器的作用是:选择对应的标签,为之添加样式 1>标签选择器:根据标签签名找到标签 div{ ...