啊啊啊,假的题吧!!!我用的当前弧优化T了6个点,其他人不用优化AC!!!震惊!!!当前弧优化是假的吧!!!

到现在我也没调出来。。。大家帮我看看为啥70.。。。

来讲一下这个题的思路,就是设一个源点,向每一个任务建边,边权为任务价值。然后任务向机器建边,边权为租金,最后机器向汇点建边,边权为购买的费用。

但这个题题意不明确,好像租完一个机器,还要花费购买的钱。

题干:

  1. Description
  2. N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成。 现在给出这些参数,求最大利润
  3. Input
  4. 第一行给出 N,M(<=N<=,<=M<=) 下面将有N块数据,每块数据第一行给出完成这个任务能赚到的钱(其在[,])及有多少道工序 接下来若干行每行两个数,分别描述完成工序所需要的机器编号及租用它的费用(其在[,]) 最后M行,每行给出购买机器的费用(其在[,])
  5. Output
  6. 最大利润
  7. Sample Input
  8.  
  9. Sample Output
  10.  
  11. HINT
  12.  
  13. Source

70分代码(欢迎大佬们指出我的错误啊)

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<ctime>
  5. #include<queue>
  6. #include<algorithm>
  7. #include<cstring>
  8. using namespace std;
  9. #define duke(i,a,n) for(int i = a;i <= n;i++)
  10. #define lv(i,a,n) for(int i = a;i >= n;i--)
  11. #define clean(a) memset(a,0,sizeof(a))
  12. const int INF = << ;
  13. typedef long long ll;
  14. typedef double db;
  15. template <class T>
  16. void read(T &x)
  17. {
  18. char c;
  19. bool op = ;
  20. while(c = getchar(), c < '' || c > '')
  21. if(c == '-') op = ;
  22. x = c - '';
  23. while(c = getchar(), c >= '' && c <= '')
  24. x = x * + c - '';
  25. if(op) x = -x;
  26. }
  27. template <class T>
  28. void write(T x)
  29. {
  30. if(x < ) putchar('-'), x = -x;
  31. if(x >= ) write(x / );
  32. putchar('' + x % );
  33. }
  34. struct node{
  35. int x,y,w,next,other;
  36. }a[];
  37. int len = ,last[],n,m,st = ,ed;
  38. void add(int x,int y,int w)
  39. {
  40. int k1,k2;
  41. a[++len].next = last[x]; k1 = len;
  42. a[len].x = x; a[len].y = y;
  43. a[len].w = w; last[x] = len;
  44. a[++len].next = last[y]; k2 = len;
  45. a[len].x = y; a[len].y = x;
  46. a[len].w = ; last[y] = len;
  47. a[k1].other = k2; a[k2].other = k1;
  48. }
  49. int qu[],h[],ans = ;
  50. int cur[];
  51. bool bfs()
  52. {
  53. clean(h);
  54. int head = ,tail = ;
  55. qu[head] = st;
  56. h[st] = ;
  57. while(head != tail)
  58. {
  59. int x = qu[head];
  60. // cout<<x<<endl;
  61. for(int k = last[x];k;k = a[k].next)
  62. {
  63. int y = a[k].y;
  64. if(h[y] == && a[k].w > )
  65. {
  66. h[y] = h[x] + ;
  67. qu[tail++] = y;
  68. }
  69. }
  70. head++;
  71. }
  72. if(h[ed] > )
  73. return true;
  74. else
  75. return false;
  76. }
  77. int dfs(int x,int f)
  78. {
  79. if(x == ed)
  80. return f;
  81. int s = ,t;
  82. for(int k = cur[x];k;k = a[k].next,cur[x] = k)
  83. {
  84. int y = a[k].y;
  85. if(s < f && h[y] == (h[x] + ) && a[k].w > )
  86. {
  87. t = dfs(y,min(a[k].w,f - s));
  88. s += t;
  89. a[k].w -= t;
  90. a[a[k].other].w += t;
  91. }
  92. }
  93. if(s == )
  94. h[x] = ;
  95. return s;
  96. }
  97. int main()
  98. {
  99. read(n);read(m);
  100. ed = n + m + ;
  101. int p,q,e,r;
  102. duke(i,,n)
  103. {
  104. read(p);
  105. ans += p;
  106. add(st,i,p);
  107. read(q);
  108. duke(j,,q)
  109. {
  110. read(e);read(r);
  111. add(i,e + n,r);
  112. }
  113. }
  114. duke(i,,m)
  115. {
  116. read(r);
  117. add(n + i,ed,r);
  118. }
  119. while(bfs())
  120. {
  121. duke(i,,n + m + )
  122. cur[i] = last[i];
  123. ans -= dfs(,INF);
  124. // cout<<ans<<endl;
  125. }
  126. write(ans);
  127. return ;
  128. }
  129. /*
  130. 2 3
  131. 100 2
  132. 1 30
  133. 2 20
  134. 100 2
  135. 1 40
  136. 3 80
  137. 50
  138. 80
  139. 110
  140. */

B1391 [Ceoi2008]order 最大权闭合图 最小割的更多相关文章

  1. POJ 2987 Firing【最大权闭合图-最小割】

    题意:给出一个有向图,选择一个点,则要选择它的可以到达的所有节点.选择每个点有各自的利益或损失.求最大化的利益,以及此时选择人数的最小值. 算法:构造源点s汇点t,从s到每个正数点建边,容量为利益.每 ...

  2. [luoguP2762] 太空飞行计划问题(最大权闭合图—最小割—最大流)

    传送门 如果将每一个实验和其所对的仪器连一条有向边,那么原图就是一个dag图(有向无环) 每一个点都有一个点权,实验为收益(正数),仪器为花费(负数). 那么接下来可以引出闭合图的概念了. 闭合图是原 ...

  3. 洛谷 P4174 [NOI2006]最大获利 && 洛谷 P2762 太空飞行计划问题 (最大权闭合子图 && 最小割输出任意一组方案)

    https://www.luogu.org/problemnew/show/P4174 最大权闭合子图的模板 每个通讯站建一个点,点权为-Pi:每个用户建一个点,点权为Ci,分别向Ai和Bi对应的点连 ...

  4. BZOJ 1565 / P2805 [NOI2009]植物大战僵尸 (最大权闭合子图 最小割)

    题意 自己看吧 BZOJ传送门 分析 - 这道题其实就是一些点,存在一些二元限制条件,即如果要选uuu则必须选vvv.求得到的权值最大是多少. 建一个图,如果选uuu必须选vvv,则uuu向vvv连边 ...

  5. 【最大权闭合子图 最小割】bzoj1497: [NOI2006]最大获利

    最大权闭合子图的模型:今天才发现dinic板子是一直挂的…… Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在 ...

  6. 【最大权闭合子图/最小割】BZOJ3438-小M的作物【待填】

    [题目大意] 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号),现在,第i种作物种植在A中种植 ...

  7. bzoj 1497 [NOI2006]最大获利【最大权闭合子图+最小割】

    不要被5s时限和50000点数吓倒!大胆网络流!我一个5w级别的dinic只跑了1s+! 看起来没有最大权闭合子图的特征--限制,实际上还是有的. 我们需要把中转站看成负权点,把p看成点权,把客户看成 ...

  8. 洛谷 P2762 太空飞行计划问题 【最大权闭合子图+最小割】

    --一道难在读入的题. 最后解决方案直接getline一行然后是把读优拆掉放进函数,虽然很丑但是过了. 然后就是裸的最大权闭合子图了,把仪器当成负权点向t连流量为其价格的边,s向实验连流量为实验报酬的 ...

  9. Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1105  Solved: 331[Submit][Statu ...

随机推荐

  1. c#——值类型与引用类型

    值类型传的是值 引用类型传的是地址

  2. 4星|《超级技术:改变未来社会和商业的技术趋势》:AI对人友好吗

    超级技术:改变未来社会和商业的技术趋势 多位专家或经济学人编辑关于未来的预测,梅琳达·盖茨写了其中一章.在同类书中属于水平比较高的,专家只写自己熟悉的领域,分析与预测有理有据而不仅仅是畅想性质. 以下 ...

  3. (转)Struts2的标签库

    http://blog.csdn.net/yerenyuan_pku/article/details/68638679 Struts2的标签库 对于一个MVC框架而言,重点是实现两部分:业务逻辑控制器 ...

  4. C# 调用win32API 获取进程句柄 有毛用???

    private void button2_Click(object sender, EventArgs e) { Process[] ProceddingCon = Process.GetProces ...

  5. R包

    查看默认安装包的位置 .libPaths() 移除包 remove.packages("package_name") 查看所有安装的包 library() 按 q 退出包列表   ...

  6. 爬虫文件存储-3:Redis

    前提条件: 安装并运行redis服务端程序,安装RedisPy库 说明:Redis 是 StrictRedis 的子类,它的主要功能是用于向后兼容旧版本库里的几个方法,官方推荐使用 StrictRed ...

  7. axios请求中跨域及post请求问题解决方案

    闲话不多说,用到vue的童鞋们应该大部分都会遇到请求中的各种奇葩问题,昨天研究一天,终于搞出来个所以然了,写篇文章拯救一下广大的童鞋们,某度娘当然也可以搜到,但一般解决了一个问题后就会出现另外一个问题 ...

  8. 20170622-编译Uboot错误

    参照:http://docs.widora.io/zh/uboot编译 Assembler messages:Error: unknown architecture `4kc' Error: unre ...

  9. STM32窗口看门狗和独立看门狗的区别,看门狗介绍及代码演示

    一.介绍: STM32看门狗分为独立看门狗和窗口看门狗两种,其两者使用调条件如下所示, IWDG和WWDG两者特点如下图所示: 独立看门狗的手册资料: 窗口看门狗的手册资料:             ...

  10. 如何实现在scrapy调试爬虫

    # -*- coding:utf-8 -*- from scrapy.cmdline import execute import sys import os '''在爬虫文件夹下面自定义一个main. ...