很经典的网络流模型,行编号和列编号分别看成一个点,行和列和分别看出容量,一个点(x,y)看出是一条边,边的容量下界是1,所以先减去1,之后在加上就好了。

建图的时候注意分配好编号,解从残留网络中的边找。

前向星建图的话,打印解会比较麻烦。

#include<bits/stdc++.h>
using namespace std; const int maxn = ; struct Edge
{
int v,cap,flow;
}; vector<Edge> edges;
#define PB push_back vector<int> G[maxn]; void AddEdge(int u,int v,int c)
{
G[u].PB(edges.size());
edges.PB(Edge{v,c,});
G[v].PB(edges.size());
edges.PB(Edge{u,,});
} const int INF = 0x3f3f3f3f;
int S,T;
int vcnt;
bool vis[maxn];
int d[maxn];
int q[maxn<<]; bool bfs()
{
memset(vis,,sizeof(bool)*vcnt);
int l = ,r = ;
q[r++] = S; vis[S] = true;
while(r>l){
int u = q[l++];
for(int i = ; i < G[u].size(); i++){
Edge &e = edges[G[u][i]];
if(!vis[e.v] && e.cap >e.flow){
vis[e.v] = true;
d[e.v] = d[u]+;
q[r++] = e.v;
}
}
}
return vis[T];
} int cur[maxn];
int dfs(int u,int a)
{
if(u == T||!a) return a;
int flow = , f;
for(int &i = cur[u]; i < G[u].size(); i++){
Edge &e = edges[G[u][i]];
if(d[e.v] == d[u]+ && (f = dfs(e.v,min(a,e.cap-e.flow)))>){
e.flow += f;
edges[G[u][i]^].flow -= f;
flow += f;
a -= f;
if(!a) break;
}
}
return flow;
} int MaxFlow()
{
int flow = ;
while(bfs()){
memset(cur,,sizeof(int)*vcnt);
flow += dfs(S,INF);
}
return flow;
} const int N = ;
int rid[N],cid[N]; void init()
{
vcnt = ;
edges.clear();
} int main()
{
//freopen("in.txt","r",stdin);
S = ; T = ;
int testCase; scanf("%d",&testCase);
int mcnt = ;
while(testCase--){
init();
int R,C,cap,pre; scanf("%d%d",&R,&C); for(int i = , M = R+C+; i < M; i++) G[i].clear();
pre = ;
for(int i = ; i < R; i++) {
rid[i] = vcnt++;
scanf("%d",&cap);
AddEdge(S,rid[i],cap-pre-C);
pre = cap;
}
pre = ;
for(int i = ; i < C; i++){
cid[i] = vcnt++;
scanf("%d",&cap);
AddEdge(cid[i],T,cap-pre-R);
pre = cap;
} for(int i = ; i < R; i++)
for(int j = ; j < C; j++){
AddEdge(rid[i],cid[j],);
} MaxFlow(); printf("Matrix %d\n",++mcnt);
for(int i = ; i < R; i++){
int k = , u = rid[i];
for(int j = ; j < G[u].size(); j++){
Edge &e = edges[G[u][j]];
if(e.v == cid[k]){
printf("%d%c",e.flow+,++k==C?'\n':' ');
if(k == C) break;
}
}
} if(testCase) putchar('\n');
}
return ;
}

UVA - 11082 Matrix Decompressing (最大流,技巧)的更多相关文章

  1. UVa 11082 Matrix Decompressing(最大流)

    不想吐槽了..sample input 和sample output 完全对不上...调了一个晚上...不想说什么了... -------------------------------------- ...

  2. UVA - 11082 Matrix Decompressing(最大流+行列模型)

    题目大意:给出一个R行C列的矩阵,如今给出他的前1-R行和 && 前1-C列和,问这个矩阵原来是如何的,要求每一个元素大小在1-20之间 解题思路:将每一行连接到超级源点,容量为该行的 ...

  3. UVA - 11082 Matrix Decompressing

    2. B - Matrix Decompressing 题意:定义一个R*C的正整数矩阵(1<=R,C<=20),设Ai为前i行所有元素之和,Bi为前i列所有元素之和. 题目已知R,C和数 ...

  4. UVa 11082 - Matrix Decompressing(最大流)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)

    题意: 知道矩阵的前i行之和,和前j列之和(任意i和j都可以).求这个矩阵.每个格子中的元素必须在1~20之间.矩阵大小上限20*20. 思路: 这么也想不到用网络流解决,这个模型很不错.假设这个矩阵 ...

  6. uva 11082 Matrix Decompressing 【 最大流 】

    只看题目的话~~怎么也看不出来是网络流的题目的说啊~~~~ 建图好神奇~~ 最开始不懂---后来看了一下这篇-- http://www.cnblogs.com/AOQNRMGYXLMV/p/42807 ...

  7. [题解]UVa 11082 Matrix Decompressing

    开始眨眼一看怎么也不像是网络流的一道题,再怎么看也觉得像是搜索.不过虽然这道题数据范围很小,但也不至于搜索也是可以随随便便就可以过的.(不过这道题应该是special judge,因为一题可以多解而且 ...

  8. UVa 11082 Matrix Decompressing - 网络流

    开始眨眼一看怎么也不像是网络流的一道题,再怎么看也觉得像是搜索.不过虽然这道题数据范围很小,但也不至于搜索也是可以随随便便就可以过的.(不过这道题应该是special judge,因为一题可以多解而且 ...

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

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

随机推荐

  1. lightoj1010【LCS】

    题意: 求最长公共子序列,并且这个子序列是字典序最小. 思路: LCS附一个值,dp[i][j].first代表以i,j的LCS的长度,dp[i][j].second代表LCS结尾元素,然后利用路径输 ...

  2. 洛谷P2568 GCD(莫比乌斯反演)

    传送门 这题和p2257一样……不过是n和m相同而已…… 所以虽然正解是欧拉函数然而直接改改就行了所以懒得再码一遍了2333 不过这题卡空间,记得mu开short,vis开bool //minamot ...

  3. [Xcode 实际操作]一、博主领进门-(12)代码重构

    目录:[Swift]Xcode实际操作 本文将演示如何重构代码. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] [快速更改同名变量或常量] 在代码编辑区域,点击需 ...

  4. [Xcode 实际操作]八、网络与多线程-(22)使用GCD多线程技术异步下载图片

    目录:[Swift]Xcode实际操作 本文将演示如何使用使用GCD多线程技术异步下载图片. Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法 ...

  5. sql server随机排序和随机取出n条数据

    问题:博主在2010-2011学年,广东技术师范大学大四的时候,去过红海人力集团面试数据库职位,很清楚记得当时有一道笔试题目是:编写sql从表里面随机取出10条记录. 解决方案:在sql server ...

  6. java多线程模拟红绿灯案例

    代码Lighter.java: package pack1; /** * 灯线程 * @author Administrator * */ public class Lighter extends T ...

  7. DRF教程3-类视图

    Rewriting our API using class-based views 使用类视图重写root views,只需要一点点重构. from django.http import Http40 ...

  8. scrapy框架中选择器的用法

    scrapy框架中选择器的用法 Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分Xpath是专门在XML文件中 ...

  9. MySQL在远程访问时非常慢的解决skip-name-resolve

    服务器放在局域网内进行测试时,数据库的访问速度还是很快.但当服务器放到外网后,数据库的访问速度就变得非常慢. 后来在网上发现解决方法,my.cnf里面添加 [mysqld] skip-name-res ...

  10. GIT GUI克隆github代码

    新建一个文件夹,右击gitgui  git clone 去掉不要