链接:http://wikioi.com/problem/1035/

怎么说呢,只能说这个建图很有意思。因为只有m条道,然后能互相接在一起的连通,对每个点进行拆点,很有意思的一道裸费用留题。

代码:

  1. #include <iostream>
  2. #include <queue>
  3. #include <iostream>
  4. #include <cstdio>
  5. #include <cstring>
  6. #include <vector>
  7. using namespace std;
  8. const int maxn = ;
  9. const int inf = ;
  10. struct node
  11. {
  12. int u,v,cap,flow,cost,next;
  13. }edges[];
  14. int head[maxn],cnt;
  15. void init(int n)
  16. {
  17. int i;
  18. for(i = ;i <= n;i++)
  19. head[i] = -;
  20. cnt = ;
  21.  
  22. return ;
  23. }
  24. void addedge(int u,int v,int cap,int flow,int cost)
  25. {
  26. edges[cnt].u = u;
  27. edges[cnt].v = v;
  28. edges[cnt].cap = cap;
  29. edges[cnt].flow = flow;
  30. edges[cnt].cost = cost;
  31. edges[cnt].next = head[u];
  32. head[u] = cnt;
  33. cnt++;
  34. edges[cnt].u = v;
  35. edges[cnt].v = u;
  36. edges[cnt].cap = ;
  37. edges[cnt].flow = flow;
  38. edges[cnt].cost = -cost;
  39. edges[cnt].next = head[v];
  40. head[v] = cnt;
  41. cnt++;
  42. }
  43. int vis[maxn],a[maxn],pre[maxn],dis[maxn];
  44. int spfa(int s,int t,int n,int &flow,int &cost)
  45. {
  46. int i;
  47. queue<int> q;
  48. for(i = ;i <= n ;i++)
  49. dis[i] = -,vis[i] = ;
  50.  
  51. dis[s] = ;
  52. pre[s] = ;
  53. vis[s] = ;
  54. a[s] = inf;
  55.  
  56. int u,v;
  57. q.push(s);
  58.  
  59. while(!q.empty())
  60. {
  61. u = q.front();
  62. q.pop();
  63. vis[u] = ;
  64.  
  65. for(i = head[u];i != -;i = edges[i].next)
  66. {
  67. struct node & e = edges[i];
  68.  
  69. v = e.v;
  70. if(e.cap > e.flow &&dis[v] < dis[u]+e.cost)
  71. {
  72. dis[v] = dis[u]+e.cost;
  73. a[v] = min(a[u],e.cap-e.flow);
  74. pre[v] = i;
  75. if(!vis[v])
  76. {
  77. vis[v] = ;
  78. q.push(v);
  79. }
  80. }
  81. }
  82. }
  83.  
  84. if(dis[t] <= )
  85. return ;
  86. flow+= a[t];
  87. cost += dis[t]*a[t];
  88. u = t;
  89. while(u != s)
  90. {
  91. edges[pre[u]].flow += a[t];
  92. edges[pre[u]^].flow -= a[t];
  93. u = edges[pre[u]].u;
  94. }
  95. return ;
  96. }
  97. int MCMF(int s,int t,int n)
  98. {
  99. int flow = ,cost = ;
  100.  
  101. while(spfa(s,t,n,flow,cost));
  102.  
  103. return cost;
  104. }
  105. int r[],c[],s[];
  106. int main()
  107. {
  108. int n,m,u,v,i,j;
  109.  
  110. scanf("%d %d",&n,&m);
  111. init(*m);
  112. for(i = ;i <= m;i++)
  113. cin>>r[i]>>c[i]>>s[i];
  114.  
  115. addedge(,*m+,n,,);
  116. for(i = ;i <= m;i++)
  117. {
  118. addedge(*m+,i,inf,,);
  119. addedge(i,m+i,,,c[i]);
  120. addedge(m+i,*m+,inf,,);
  121. for(j = ;j <= m;j++)
  122. {
  123. if(r[i]+s[i] < r[j])
  124. addedge(m+i,j,inf,,);
  125. }
  126. }
  127. double ans;
  128. ans = 1.0*MCMF(,*m+,*m+);
  129.  
  130. printf("%.2f\n",ans/);
  131. return ;
  132. }

wikioi 1035 火车停留 裸费用流的更多相关文章

  1. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  2. BZOJ-3130 费用流 (听题目胡扯丶裸最大流) 二分判定+最大流+实数精度乱搞

    DCrusher爷喜欢A我做的水题,没办法,只能A他做不动的题了.... 3130: [Sdoi2013]费用流 Time Limit: 10 Sec Memory Limit: 128 MBSec ...

  3. 【wikioi】1033 蚯蚓的游戏问题(费用流)

    http://wikioi.com/problem/1033/ 这题也是很水的费用流啊,同之前那题一样,拆点然后建边,容量为1,费用为点权.然后建个源连第一行每个点,容量为1,费用为0,然后最后一行每 ...

  4. 【wikioi】1227 方格取数 2(费用流)

    http://www.wikioi.com/problem/1227 裸题,拆点,容量为1,费用为点权的负数(代表只能取一次).再在拆好的两个点连边,容量为oo,费用为0.(代表能取0) 然后向右和下 ...

  5. HDU 3376 &amp;&amp; 2686 方格取数 最大和 费用流裸题

    题意: 1.一个人从[1,1] ->[n,n] ->[1,1] 2.仅仅能走最短路 3.走过的点不能再走 问最大和. 对每一个点拆点限流为1就可以满足3. 费用流流量为2满足1 最大费用流 ...

  6. 【wikioi】1034 家园(最大流+特殊的技巧)

    http://wikioi.com/problem/1034/ 太神了这题. 其实一开始我以为是费用流,但是总感觉不对. 原因是我没看到一句话,特定的时刻到达特定的点!! 也就是说,并不是每艘船每次都 ...

  7. BZOJ 1061: [Noi2008]志愿者招募 费用流

    1061: [Noi2008]志愿者招募 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1061 Description 申奥成功后,布布 ...

  8. Aizu 2304 Reverse Roads 费用流

    Reverse Roads Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view ...

  9. BZOJ 1927: [Sdoi2010]星际竞速 费用流

    1927: [Sdoi2010]星际竞速 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

随机推荐

  1. Django框架【基础篇】

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  2. 双态运维分享之:业务场景驱动的服务型CMDB

    最近这几年,国内外CMDB失败的案例比比皆是,成功的寥寥可数,有人质疑CMDB is dead?但各种业务场景表明,当下数据中心运维,CMDB依然是不可或缺的一部分,它承载着运维的基础,掌握运维的命脉 ...

  3. JQuery的Ajax跨域请求的解决方式

            今天在项目中须要做远程数据载入并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究 ...

  4. loadNibNamed:(NSString *)name owner:(nullable id)owner options:(nullable NSDictionary *)options用法

    1.name xib的名字 owner当前类对象 options初始参数 实际应用: NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@&quo ...

  5. php计算中英文混合或中文字符串的字数

    转载来源链接: http://blog.csdn.net/hueise_h/article/details/22920937 php的strlen和mb_strlen用于统计字符个数.中英文混合的字符 ...

  6. 跟我学Makefile(六)

    shell 函数 :和反引号“`”是相同的功能 . shell 函数把执行操作系统命令后的输出作为函数返回. contents := $(shell cat foo) files := $(shell ...

  7. Web前台学习总结

    前台的技术有很多种,流行的框架也是枚不胜举,在这里我们只讨论html,css,js这些基本的技术,相信大家如果掌握了这些最基本的技术,其他的技术也就会使用了. 下面是一个案例的形式来讲解上述的技术. ...

  8. 牛客国庆集训派对Day6 Solution

    A    Birthday 思路:设置一个源点,一个汇点,每次对$源点对a_i, b_i , a_i 对 b_i 连一条流为1,费用为0的边$ 每个点都再连一条 1, 3, 5, 7, ....的边到 ...

  9. BabelMap 10.0.0.3 汉化版已经发布

    新的 BabelMap 在日前发布. 新版本增加了字符书签的管理功能,以及将窗口最小化到系统通知栏(时钟区域)的功能. 请点击主页左上角进入下载页面下载.

  10. 【android】如何实现猿题库题目的排版

    最近我们的产品来了个新的模块,类似猿题库一样,给学生做题提高成绩的. 要求如下: 1:支持单选.多选.填空题 2:支持图片文字混排 3:输入框有交互,排版精致美观 4:为了体验优化,不能使用网页实现效 ...