题目链接:

Matrix Decompressing

题意:

给一个矩阵的每行和每列的和,(给的是前i行或者列的和);

矩阵中每个元素的值在1到20之间,找出这样的一个矩阵;

思路:

把它转化成一个二分图,每行和每列之间连一条弧,然后设置一个源点和一个汇点,源点与行点相连,汇点与列点相连,求一个最大值,当然这是一个有下界的最大流,需要做-1的处理,同时与源汇相连的边也是要处理的;最后求得的反向边+1就是答案了;

AC代码:

  1. #include <bits/stdc++.h>
  2. /*#include <iostream>
  3. #include <queue>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <algorithm>
  7. #include <cstdio>
  8. */
  9. using namespace std;
  10. #define Riep(n) for(int i=1;i<=n;i++)
  11. #define Riop(n) for(int i=0;i<n;i++)
  12. #define Rjep(n) for(int j=1;j<=n;j++)
  13. #define Rjop(n) for(int j=0;j<n;j++)
  14. #define mst(ss,b) memset(ss,b,sizeof(ss));
  15. typedef long long LL;
  16. const LL mod=1e9+;
  17. const double PI=acos(-1.0);
  18. const int inf=0x3f3f3f3f;
  19. const int N=1e5+;
  20.  
  21. int n,m,a[],b[],cap[][],path[],flow[];
  22. queue<int>qu;
  23. int bfs()
  24. {
  25. mst(path,-);
  26. flow[]=inf;
  27. path[]=;
  28. qu.push();
  29. while(!qu.empty())
  30. {
  31. int fr=qu.front();
  32. qu.pop();
  33. for(int i=;i<=n+m+;i++)
  34. {
  35. if(path[i]==-&&cap[fr][i])
  36. {
  37. flow[i]=min(cap[fr][i],flow[fr]);
  38. path[i]=fr;
  39. qu.push(i);
  40. }
  41. }
  42. }
  43. if(path[n+m+]==-)return -;
  44. return flow[n+m+];
  45. }
  46. void maxflow()
  47. {
  48. int now,pre;
  49. while()
  50. {
  51. int temp=bfs();
  52. if(temp==-)break;
  53. now=n+m+;
  54. while(now!=)
  55. {
  56. pre=path[now];
  57. cap[pre][now]-=temp;
  58. cap[now][pre]+=temp;
  59. now=pre;
  60. }
  61. }
  62. }
  63. int main()
  64. {
  65. int t,Case=;
  66. scanf("%d",&t);
  67. while(Case<=t)
  68. {
  69. mst(cap,);
  70. scanf("%d%d",&n,&m);
  71. Riep(n)scanf("%d",&a[i]);
  72. Riep(n)
  73. {
  74. cap[][i]=a[i]-a[i-]-m;
  75. }
  76. Riep(m)scanf("%d",&b[i]);
  77. Riep(m)
  78. {
  79. cap[i+n][n+m+]=b[i]-b[i-]-n;
  80. }
  81. for(int i=;i<=n;i++)
  82. for(int j=;j<=m;j++)
  83. cap[i][j+n]=;
  84. maxflow();
  85. printf("Matrix %d\n",Case++);
  86. Riep(n)
  87. {
  88. Rjep(m-)
  89. printf("%d ",cap[j+n][i]+);
  90. printf("%d\n",cap[m+n][i]+);
  91. }
  92. printf("\n");
  93. }
  94. return ;
  95. }

UVA-11082 Matrix Decompressing(有上下界的最大流)的更多相关文章

  1. UVa 11082 Matrix Decompressing(最大流)

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

  2. UVA - 11082 Matrix Decompressing

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

  3. [题解]UVa 11082 Matrix Decompressing

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

  4. UVa 11082 Matrix Decompressing - 网络流

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

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

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

  6. UVA - 11082 Matrix Decompressing (最大流,技巧)

    很经典的网络流模型,行编号和列编号分别看成一个点,行和列和分别看出容量,一个点(x,y)看出是一条边,边的容量下界是1,所以先减去1,之后在加上就好了. 建图的时候注意分配好编号,解从残留网络中的边找 ...

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

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

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

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

  9. uva 11082 Matrix Decompressing 【 最大流 】

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

随机推荐

  1. hdu4862 2014多校B题/ 费用流(最优情况下用不大于K条路径覆盖)(不同的解法)

    题意: 一个数字矩阵,可以出发K次,每次可以从右边或者下面走,要求(在收益最大情况下)覆盖全图,不能则输出-1.(规则:每次跳一步的时候若格子数字相等则获得该数字的能量,每跳一步消耗距离的能量).每个 ...

  2. POJ2752 NEXT[J]特性应用利用。

    题意:求一个字符串所有的前缀和后缀相同的情况,每个情况输出长度,如 ababcababababcabab :2 4 9 18 思路:next数组应用,利用j=nxet[i],i之前与开头相同的字符串长 ...

  3. DTD概述

    1. 什么是XML文件 可扩展标记语言,标准通用标记语言的子集,是用于标记电子文件使其具有结构性的标记语言. 2. 什么是dtd文件 DTD(文档类型定义)的作用是定义XML文档的合法构建模块.它使用 ...

  4. JS标签获取另一个页面传过来的href值

    a href=b.html?id=楼主>B页面</a>b.html中的获取函数:function getParam(){C1=window.location.href.split(& ...

  5. Jquery表单序列化和json操作

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. IIS Express 的怪毛病 vs2013本机调试

    本机调试时,如果同一个项目有多个版本,同时debug,可能会串项目调试,造成不必要的困扰: 通常情况下是 IIS express的映射出现了问题: 解决方案: 1.打开目录:查看文件C:\Users\ ...

  7. JS实现根据密码长度 显示安全条

    原文:http://www.open-open.com/code/view/1431324883763 //根据密码长度显示安全条 <ul class="clear"> ...

  8. 【Mybatis】 Mybatis在xml文件中处理大于号小于号的方法【问题】

    处理大于小于号的方法: https://www.cnblogs.com/winner-0715/p/6132755.html 第一种方法:用转义字符把">"和"&l ...

  9. 更改Tomcat命令行窗体标题

     在windows下启动多个tomcat时.不好区分哪个tomcat相应哪个服务,能够通过下面方法设置Tomcat命令行窗体的标题: 1.在%tomcat_home%\bin\catalina.b ...

  10. 关于 thinkPHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback

    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback 关于thinkPHP rpc调 ...