题意:给出一个矩阵前i列所有元素的和,和前j行所有元素的和,求这个矩阵解压以后的原型。(答案不唯一)

n,m<=20,1<=a[i,j]<=20

思路:这道题把边上的流量作为原先矩阵中的点

把每一行,每一列都看成一个点

S——>i行 a[i]-m

i行——>j列 19

j列——>T b[i]-n

跑最大流,边(i,j+n)上的流量就是a[i,j]的值

为什么容量是a[i]-m,19,b[i]-n?

因为点权(边权)不能为0,所以要先把所有值+1,上限就-1,输出的时候+1即可

 var fan:array[..]of longint;
head,vet,next,len,gap,dis,a,b,c1,c2:array[..]of longint;
num:array[..,..]of longint;
n,m,i,j,tot,s,source,src,cas,v:longint; procedure add(a,b,c:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
len[tot]:=c;
head[a]:=tot; inc(tot);
next[tot]:=head[b];
vet[tot]:=a;
len[tot]:=;
head[b]:=tot;
end; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; function dfs(u,aug:longint):longint;
var e,v,t,flow,val:longint;
begin
if u=src then exit(aug);
e:=head[u]; flow:=; val:=s-;
while e<> do
begin
v:=vet[e];
if len[e]> then
begin
if dis[u]=dis[v]+ then
begin
t:=dfs(v,min(len[e],aug-flow));
len[e]:=len[e]-t;
len[fan[e]]:=len[fan[e]]+t;
flow:=flow+t;
if dis[source]>=s then exit(flow);
if aug=flow then break;
end;
val:=min(val,dis[v]);
end;
e:=next[e];
end;
if flow= then
begin
dec(gap[dis[u]]);
if gap[dis[u]]= then dis[source]:=s;
dis[u]:=val+;
inc(gap[dis[u]]);
end;
exit(flow);
end; function maxflow:longint;
var ans:longint;
begin
fillchar(gap,sizeof(gap),);
fillchar(dis,sizeof(dis),);
gap[]:=s; ans:=;
while dis[source]<s do ans:=ans+dfs(source,maxlongint);
exit(ans);
end; begin
assign(input,'UVA11082.in'); reset(input);
assign(output,'UVA11082.out'); rewrite(output);
for i:= to do
if i mod = then fan[i]:=i+
else fan[i]:=i-;
readln(cas);
for v:= to cas do
begin
fillchar(head,sizeof(head),); tot:=;
fillchar(num,sizeof(num),);
fillchar(len,sizeof(len),);
readln(n,m);
for i:= to n do
begin
read(a[i]); c1[i]:=a[i]-a[i-];
end;
for i:= to m do
begin
read(b[i]); c2[i]:=b[i]-b[i-];
end;
s:=n+m+; source:=n+m+; src:=n+m+;
for i:= to n do add(source,i,c1[i]-m);
for i:= to m do add(i+n,src,c2[i]-n);
for i:= to n do
for j:= to m do
begin
num[i,j]:=tot+;
add(i,j+n,);
end;
maxflow;
writeln('Matrix ',v);
for i:= to n do
begin
for j:= to m- do write(len[num[i,j]]+,' ');
write(len[num[i,m]]+);
writeln;
end;
if v<>cas then writeln;
end; close(input);
close(output);
end.

【UVA11082】Matrix Decompressing(有上下界的网络流)的更多相关文章

  1. UVA-11082 Matrix Decompressing(有上下界的最大流)

    题目链接: Matrix Decompressing 题意: 给一个矩阵的每行和每列的和,(给的是前i行或者列的和); 矩阵中每个元素的值在1到20之间,找出这样的一个矩阵: 思路: 把它转化成一个二 ...

  2. ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)

    //有流量上下界的网络流 //Time:47Ms Memory:1788K #include<iostream> #include<cstring> #include<c ...

  3. SGU 194. Reactor Cooling(无源汇有上下界的网络流)

    时间限制:0.5s 空间限制:6M 题意: 显然就是求一个无源汇有上下界的网络流的可行流的问题 Solution: 没什么好说的,直接判定可行流,输出就好了 code /* 无汇源有上下界的网络流 * ...

  4. 【ZOJ2314】Reactor Cooling(有上下界的网络流)

    前言 话说有上下界的网络流好像全机房就我一个人会手动滑稽,当然这是不可能的 Solution 其实这道题目就是一道板子题,主要讲解一下怎么做无源无汇的上下界最大流: 算法步骤 1.将每条边转换成0~u ...

  5. ZOJ 2314 有上下界的网络流

    problemCode=2314">点击打开链接 题意:给定m条边和n个节点.每条边最少的流量和最多的流量.保证每一个节点的出入流量和相等,问能够形成吗,能够则输出每条边的流量 思路: ...

  6. poj_2396 有上下界的网络流

    题目大意 一个mxn的矩阵,给出矩阵中每一行的和sh[1,2...m]以及每一列的数字的和目sv[1,2...n],以及矩阵中的一些元素的范围限制,比如a[1][2] > 1, a[2][3] ...

  7. 【BZOJ2502】清理雪道 有上下界的网络流 最小流

    [BZOJ2502]清理雪道 Description        滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降 ...

  8. 【2018沈阳赛区网络预选赛J题】Fantastic Graph 【有上下界的网络流】

    要补的题太多了导致最近没写博客(好吧是我懒) 题目链接https://nanti.jisuanke.com/t/31447 题意 给出一个二分图,问能否挑选出一些边,使得每个点的度数都在[L,R]这个 ...

  9. UVA11082 Matrix Decompressing 最大流建模解矩阵,经典

    /** 题目:UVA11082 Matrix Decompressing 链接:https://vjudge.net/problem/UVA-11082 题意:lrj入门经典P374 已知一个矩阵的行 ...

  10. ZOJ2314 Reactor Cooling(有上下界的网络流)

    The terrorist group leaded by a well known international terrorist Ben Bladen is buliding a nuclear ...

随机推荐

  1. cocos2dx day 1

    原文:http://www.cocos2d-x.org/programmersguide/2/index.html 一.Basic Concepts 1.director 2.scene 2.1 sc ...

  2. 从零开始,教你用Webpack构建React基础工程

    参考 http://www.jianshu.com/p/4df92c335617

  3. springmvc 接受特殊类型字段的处理方法

    springmvc接受前台传入的数据时如果该字段类型无法被封装(如Date),则会出现400 Bad Request错误,解决方法如下. 1.在需要处理的字段前加上注解: @DateTimeForma ...

  4. CRLF和LF

    协作项目,开发环境不同(mac,window)构建过程中,命令行报错(expecting LF but only find CRLF) 打开git bash,输入 $ git config --glo ...

  5. Android狂记忆

    虽然说技术人员偏爱实战,而不屑理论或记忆,但实战之前,若是记忆一些知识,开发起来将会如虎添翼,不说了,开始狂记吧! Android 系统包说明: android.app  :提供高层的程序模型.提供基 ...

  6. php创建文件并写入信息

    $myfile = fopen("c:\\newfile.txt", "w") or die("Unable to open file!") ...

  7. PSP个人(观众界面)

    需求:作为一个观众,我希望了解某一场比赛的比分,以便了解赛况.(满意条件:精确到每一局的结果比分) 需求分析:实现查询数据库中每一局的分数并用界面显示. 生成设计文档: 运用三层架构,实现软件的基本功 ...

  8. Thinkphp源码分析系列(四)–Dispatcher类

    下面我们来分析一下Thinkphp中的url解析和路由调度类.此类主要功能是 // +--------------------------------------------------------- ...

  9. flag--命令行参数定义多标签示例

    // TestFlag2 project main.go package main import ( "flag" "fmt" ) func main() { ...

  10. html5 定位 获得当前位置的经纬度

    if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition, showError, { // ...