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 已知一个矩阵的行 ...
随机推荐
- CodeForces Gym 100685E Epic Fail of a Genie (贪心,控制精度)
题意:给定 n 个数,然后让从中选取一些数使得它们的总乘积最大.如果有多个,要求这些数尽量少,如果还有多个,随便输出一组即可. 析:一个贪心题,根据乘法的性质,很容易知道,如果一个数大于1,那么肯定要 ...
- 解决“System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本”
问题描述:远程访问该数据库(客户端同样是Oracle11g)提示“System.Data.OracleClient需要Oracle客户端软件8.1.7或更高版本”. 解决的办法: 1.一定要关闭Win ...
- FZU 2150 Fire Game (高姿势bfs--两个起点)(路径不重叠:一个队列同时跑)
Description Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows ...
- PHP 数组序列化,转为字符串
serialize() <?php $a = array('a' => 'as' ,'b' => 'bs' , 'c' => 'cs'); //序列化数组 $s = seria ...
- 渲染路径-实时渲染中常用的几种Rendering Path
http://www.cnblogs.com/polobymulberry/p/5126892.html?utm_source=tuicool&utm_medium=referral 回到顶部 ...
- hdu1850(nim博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1850 题意:中文题诶- 思路:nim博弈 可以将本题抽象成一般nim博弈,那么有: 1. 对于所有元素 ...
- [SDOI2019] 热闹又尴尬的聚会
热闹度\(p\)子图中最小的度数,尴尬度\(q\)独立集大小,之间的约束 \[ \begin{aligned} \lfloor n/(p+1)\rfloor\le q &\rightarrow ...
- random 库
random 是使用随机数的python 标准库 ——为随机数:采用梅森旋转算法生成的(伪)随机序列中的元素 —— import random 基本随机数函数:seed(),random() 扩展随机 ...
- JS的this原理
转载阮一峰博客: www.ruanyifeng.com/blog/2018/06/javascript-this.html 一.问题的由来 学懂 JavaScript 语言,一个标志就是理解下面两 ...
- AtCoder Regular Contest 078 D
D - Fennec VS. Snuke Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement F ...