【题意】每台计算机由P个零件组成,工厂里有n台机器,每台机器针对P个零件有不同的输入输出规格,现在给出每台机器每小时的产量,问如何建立流水线(连接各机器)使得每小时生产的计算机最多。

网络流的建图真的比较有意思~~

【建图】如下图,建一个输出规格都为0的超级源点表示起始状态,建一个输入规格都为1的超级汇点表示完成一台电脑,把每一个机器拆成一个源点和一个汇点,之间连一条performance的边表示每小时能产几台。对于任意两台机器,如果其中一台的输出规格=另一台的输入规格,则两边连一条无穷流量的边(包括超级源汇点),求出最大流即可。

【输出解】这个比较好想,遍历流网络,可以只看反向边,如果反向边流量>0则表示该条边有流量,输出.

  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include
  10. #include
  11. #include
  12. #define MID(x,y) ((x+y)/2)
  13. #define mem(a,b) memset(a,b,sizeof(a))
  14. using namespace std;

  15. const int oo = 0x3fffffff;

  16. const int MAXV = 205;

  17. const int MAXE = 30005;

  18. struct node{

  19. int u, v, flow;

  20. int opp;

  21. int next;

  22. };

  23. int inq[52][12];

  24. int outq[52][12];

  25. struct Dinic{

  26. node arc[MAXE];

  27. int vn, en, head[MAXV]; //vn点个数(包括源点汇点),en边个数

  28. int cur[MAXV]; //当前弧

  29. int q[MAXV]; //bfs建层次图时的队列

  30. int path[MAXE], top; //存dfs当前最短路径的栈

  31. int dep[MAXV]; //各节点层次

  32. void init(int n){

  33. vn = n;

  34. en = 0;

  35. mem(head, -1);

  36. }

  37. void insert_flow(int u, int v, int flow){

  38. arc[en].u = u;

  39. arc[en].v = v;

  40. arc[en].flow = flow;

  41. arc[en].opp = en + 1;

  42. arc[en].next = head[u];

  43. head[u] = en ++;

  44. arc[en].u = v;

  45. arc[en].v = u;

  46. arc[en].flow = 0; //反向弧

  47. arc[en].opp = en - 1;

  48. arc[en].next = head[v];

  49. head[v] = en ++;

  50. }

  51. bool bfs(int s, int t){

  52. mem(dep, -1);

  53. int lq = 0, rq = 1;

  54. dep[s] = 0;

  55. q[lq] = s;

  56. while(lq 0){

  57. dep[v] = dep[u] + 1;

  58. q[rq ++] = v;

  59. }

  60. }

  61. }

  62. return false;

  63. }

  64. int solve(int s, int t){

  65. int maxflow = 0;

  66. while(bfs(s, t)){

  67. int i, j;

  68. for (i = 1; i arc[path[k]].flow){

  69. minflow = arc[path[k]].flow;

  70. mink = k;

  71. }

  72. for (int k = 0; k 0){

  73. path[path_num].u = dinic.arc[i].v / 2;

  74. path[path_num].v = (dinic.arc[i].u + 1) / 2;

  75. path[path_num++].w = dinic.arc[i].flow;

  76. }

  77. }

  78. printf("%d %d\n", maxflow, path_num);

  79. for (int i = 0; i

  80. POJ 3436 ACM Computer Factory (拆点+输出解)的更多相关文章

      1. POJ 3436 ACM Computer Factory (网络流,最大流)
      1. POJ 3436 ACM Computer Factory (网络流,最大流) Description As you know, all the computers used for ACM cont ...

      1. Poj 3436 ACM Computer Factory (最大流)
      1. 题目链接: Poj 3436 ACM Computer Factory 题目描述: n个工厂,每个工厂能把电脑s态转化为d态,每个电脑有p个部件,问整个工厂系统在每个小时内最多能加工多少台电脑? 解题 ...

      1. POJ - 3436 ACM Computer Factory 网络流
      1. POJ-3436:http://poj.org/problem?id=3436 题意 组配计算机,每个机器的能力为x,只能处理一定条件的计算机,能输出特定的计算机配置.进去的要求有1,进来的计算机这个 ...

      1. POJ 3436 ACM Computer Factory(最大流+路径输出)
      1. http://poj.org/problem?id=3436 题意: 每台计算机包含P个部件,当所有这些部件都准备齐全后,计算机就组装完成了.计算机的生产过程通过N台不同的机器来完成,每台机器用它的性 ...

      1. POJ 3436 ACM Computer Factory 最大流,拆点 难度:1
      1. 题目 http://poj.org/problem?id=3436 题意 有一条生产线,生产的产品共有p个(p<=10)零件,生产线上共有n台(n<=50)机器,每台机器可以每小时加工Qi ...

      1. POJ 3436 ACM Computer Factory
      1. 题意:   为了追求ACM比赛的公平性,所有用作ACM比赛的电脑性能是一样的,而ACM董事会专门有一条生产线来生产这样的电脑,随着比赛规模的越来越大,生产线的生产能力不能满足需要,所以说ACM董事会想 ...

      1. POJ - 3436 ACM Computer Factory(最大流)
      1. https://vjudge.net/problem/POJ-3436 题目描述:  正如你所知道的,ACM 竞赛中所有竞赛队伍使用的计算机必须是相同的,以保证参赛者在公平的环境下竞争.这就是所有这些 ...

      1. kuangbin专题专题十一 网络流 POJ 3436 ACM Computer Factory
      1. 题目链接:https://vjudge.net/problem/POJ-3436 Sample input 1 3 4 15 0 0 0 0 1 0 10 0 0 0 0 1 1 30 0 1 2 1 ...

      1. poj 3436 ACM Computer Factory 最大流+记录路径
      1. 题目 题意: 每一个机器有一个物品最大工作数量,还有一个对什么物品进行加工,加工后的物品是什么样.给你无限多个初始都是000....的机器,你需要找出来经过这些机器操作后最多有多少成功的机器(111. ...

    1.  
    2. 随机推荐

        1. hbase on spark
        1. 1.spark的伪分布式环境下安装HBASE (1)版本:我使用的spark版本是1.3.0,使用的hbase版本是hbase-0.94.16 (2)解压,tar zxvf  hbase-0.94. ...

        1. 题目1444More is better
        1. 时间限制:3 内存限制:100 特殊判题:否 提交:1362 解决:640 题目描述: Mr Wang wants some boys to help him with a project. ...

        1. 大批量DML操作应该注意什么?
        1. 问:大批量DML操作应该注意什么? 答:大批量DML操作可能会撑爆undo表空间,导致数据库挂起.因此我们应该设置一个合适的undo表空间,或对DML操作的分批提交.

        1. VC++入门精通视频教程
        1. 1.1.Windows程序运行原理-1 上传日期:2012-03-19 09:18:50  相关摘要:  - 在关闭一个windows窗口时,也关闭另一个吗 - 对纯面向对象的PHP程序有何看法? - ...

        1. 关于 .net 开发 Office Word 的一些问题小结
        1. 1."组件服务"DCom配置中找到Microsoft Office Word =>属性=>标识选项卡,然后选择交互式用户:::=>"安全" ...

        1. linux 历史命令用法(转)
        1. 许多使用过Linux一段时间的人通过一些基础操作已经能够把Linux各方面基本玩转,但是如果没有经过系统学习的话就容易缺乏一些实战技巧.这系列文章介绍一些关于bash的能够提高效率的技巧,主要是关于历 ...

        1. myeclipse2013 for linux及其破解补丁百度网盘下载
        1. FQ下载1.1G的东西不是开玩笑的,用GA下载了两回均失败,还是用了某某门在win下下载好的,来之不易,所以特意上传分享给大家,免得FQ.破解文件也一并附上: 注意:本人这个是在原文件基础上bzip2 ...

        1. 3.8 spring - AbstractBeanDefinition 介绍
        1. 之前,我们已尽完成了xml 文档到 GenericBeanDefinition的转换, 也就是说,到这里,所有的配置都可以在GenericBeanDefinition 的实例中找到对应的配置. Gen ...

        1. 无法为请求的 Configuration 对象创建配置文件 错误原因
        1. Configuration config = WebConfigurationManager.OpenWebConfiguration("~"); 无法为请求的 Configura ...

        1. What is an eigenvector of a covariance matrix?
        1. What is an eigenvector of a covariance matrix? One of the most intuitive explanations of eigenvector ...