UVA - 11082 Matrix Decompressing (最大流,技巧)
很经典的网络流模型,行编号和列编号分别看成一个点,行和列和分别看出容量,一个点(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 (最大流,技巧)的更多相关文章
- UVa 11082 Matrix Decompressing(最大流)
不想吐槽了..sample input 和sample output 完全对不上...调了一个晚上...不想说什么了... -------------------------------------- ...
- UVA - 11082 Matrix Decompressing(最大流+行列模型)
题目大意:给出一个R行C列的矩阵,如今给出他的前1-R行和 && 前1-C列和,问这个矩阵原来是如何的,要求每一个元素大小在1-20之间 解题思路:将每一行连接到超级源点,容量为该行的 ...
- UVA - 11082 Matrix Decompressing
2. B - Matrix Decompressing 题意:定义一个R*C的正整数矩阵(1<=R,C<=20),设Ai为前i行所有元素之和,Bi为前i列所有元素之和. 题目已知R,C和数 ...
- UVa 11082 - Matrix Decompressing(最大流)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
题意: 知道矩阵的前i行之和,和前j列之和(任意i和j都可以).求这个矩阵.每个格子中的元素必须在1~20之间.矩阵大小上限20*20. 思路: 这么也想不到用网络流解决,这个模型很不错.假设这个矩阵 ...
- uva 11082 Matrix Decompressing 【 最大流 】
只看题目的话~~怎么也看不出来是网络流的题目的说啊~~~~ 建图好神奇~~ 最开始不懂---后来看了一下这篇-- http://www.cnblogs.com/AOQNRMGYXLMV/p/42807 ...
- [题解]UVa 11082 Matrix Decompressing
开始眨眼一看怎么也不像是网络流的一道题,再怎么看也觉得像是搜索.不过虽然这道题数据范围很小,但也不至于搜索也是可以随随便便就可以过的.(不过这道题应该是special judge,因为一题可以多解而且 ...
- UVa 11082 Matrix Decompressing - 网络流
开始眨眼一看怎么也不像是网络流的一道题,再怎么看也觉得像是搜索.不过虽然这道题数据范围很小,但也不至于搜索也是可以随随便便就可以过的.(不过这道题应该是special judge,因为一题可以多解而且 ...
- UVA11082 Matrix Decompressing 最大流建模解矩阵,经典
/** 题目:UVA11082 Matrix Decompressing 链接:https://vjudge.net/problem/UVA-11082 题意:lrj入门经典P374 已知一个矩阵的行 ...
随机推荐
- 【eclipse插件开发实战】Eclipse插件开发3——OSGi、RCP
Eclipse插件开发实战3--OSGi.RCP 一.OSGi 1. 什么是OSGi框架 OSGi(Open Service Gateway Initiative)框架是运行在JavaVM环境里的服务 ...
- C# 程序软件启动默认管理员权限。
在vs的Properties目录中找到 app.manifest,将其中level="asInvoker" 改成 level="requireAdministrator& ...
- Codeforces Round #383 【总结】
总结一下这场... 搞起大号就崩了... A题没啥问题..通过电脑到手机上提交没啥大问题: B题,讲个最严重的问题,也是最近以来最严重的问题,虽然我说你开了个数组,虽然这个数组是不是最终的答案数组,但 ...
- 2014-6-28 NOIP模拟赛
[今天我出的三道题目全部是图论哦,请大家轻虐] 1.魔术球问题弱化版(ball.c/.cpp/.pas) 题目描述 假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,…的 ...
- golang开发:(二)安装 Golang
当然了我们的安装都是在vagrant里面安装,vagrant ssh.不用虚拟机了,本机安装当然也可以. Mac 安装 访问下载地址,下载 go1.12.5.darwin-amd64.pkg,双击下载 ...
- Python 学习 Part1
1. 斐波那契数序列 >>> a,b=0,1 >>> a 0 >>> b 1 >>> while b<10: print( ...
- 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?
本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...
- 干货:排名前16的Java工具类
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- E - Round Numbers
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> ...
- excel输入值非法,限定了可以输入的数值怎么办
回到excel的编辑界面,点击工具栏的“数据”标签,如图所示. 继续在“数据”标签的下面找到“数据验证”或“数据有效性”的按钮,点击该选项,然后继续下一步. 在弹出的选择框中选择“数据验证”选项,如图 ...