inf开太小错了好久……下次还是要用0x7fffffff

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<vector>
  4. #include<queue>
  5. #include<algorithm>
  6. using namespace std;
  7. const int N=5024;
  8. const int inf=0x7fffffff;
  9. struct Edge
  10. {
  11. int from,to,cap,flow,cost;
  12. };
  13. vector<Edge>edges;
  14. vector<int>G[N];
  15. int n,m;
  16. int inq[N],p[N],d[N],a[N];
  17. void AddEdge(int from, int to,int cap, int cost)
  18. {
  19. Edge tp;
  20. tp.from=from,tp.to=to,tp.cap=cap,tp.flow=0,tp.cost=cost;
  21. edges.push_back(tp);
  22. tp.from=to,tp.to=from,tp.cap=0,tp.flow=0,tp.cost=-cost;
  23. edges.push_back(tp);
  24. int g=edges.size();
  25. G[from].push_back(g-2);
  26. G[to].push_back(g-1);
  27. }
  28. int BellmanFord(int s,int t,int &flow, int &cost)
  29. {
  30. int i,j,u;
  31. for(i=0; i<=n+1; i++) d[i]=inf;
  32. memset(inq,0,sizeof(inq));
  33. d[s]=0;
  34. inq[s]=1;
  35. p[s]=0;
  36. a[s]=inf;
  37. queue<int>Q;
  38. Q.push(s);
  39. while(!Q.empty())
  40. {
  41. u=Q.front();
  42. Q.pop();
  43. inq[u]=0;
  44. for(i=0; i<G[u].size(); i++)
  45. {
  46. Edge &e=edges[G[u][i]];
  47. if(e.cap>e.flow&&d[e.to]>d[u]+e.cost)
  48. {
  49. d[e.to]=d[u]+e.cost;
  50. p[e.to]=G[u][i];
  51. a[e.to]=min(a[u],e.cap-e.flow);
  52. if(!inq[e.to])
  53. {
  54. Q.push(e.to);
  55. inq[e.to]=1;
  56. }
  57. }
  58. }
  59. }
  60. if(d[t]==inf) return 0;
  61. flow+=a[t];
  62. cost+=d[t]*a[t];
  63. u=t;
  64. while(u!=0)
  65. {
  66. edges[p[u]].flow+=a[t];
  67. edges[p[u]^1].flow-=a[t];
  68. u=edges[p[u]].from;
  69. }
  70. return 1;
  71. }
  72. int Mincost(int s,int t)
  73. {
  74. int flow=0,cost=0;
  75. while(BellmanFord(s,t,flow,cost));
  76. return cost;
  77. }
  78. int main()
  79. {
  80. int i,u,v,c;
  81. while(~scanf("%d%d",&n,&m))
  82. {
  83. for(i=0; i<=n+1; i++) G[i].clear();
  84. edges.clear();
  85. for(i=0;i<m;i++)
  86. {
  87. scanf("%d%d%d",&u,&v,&c);
  88. AddEdge(u,v,1,c);
  89. AddEdge(v,u,1,c);
  90. }
  91. AddEdge(0,1,2,0);
  92. AddEdge(n,n+1,2,0);
  93. printf("%d\n",Mincost(0,n+1));
  94. }
  95. return 0;
  96. }

poj 2135 Farm Tour 最小费最大流的更多相关文章

  1. POJ 2135 Farm Tour [最小费用最大流]

    题意: 有n个点和m条边,让你从1出发到n再从n回到1,不要求所有点都要经过,但是每条边只能走一次.边是无向边. 问最短的行走距离多少. 一开始看这题还没搞费用流,后来搞了搞再回来看,想了想建图不是很 ...

  2. poj 2135 Farm Tour 最小费用最大流建图跑最短路

    题目链接 题意:无向图有N(N <= 1000)个节点,M(M <= 10000)条边:从节点1走到节点N再从N走回来,图中不能走同一条边,且图中可能出现重边,问最短距离之和为多少? 思路 ...

  3. POJ 2135 Farm Tour (网络流,最小费用最大流)

    POJ 2135 Farm Tour (网络流,最小费用最大流) Description When FJ's friends visit him on the farm, he likes to sh ...

  4. poj 2135 Farm Tour 【无向图最小费用最大流】

    题目:id=2135" target="_blank">poj 2135 Farm Tour 题意:给出一个无向图,问从 1 点到 n 点然后又回到一点总共的最短路 ...

  5. 网络流(最小费用最大流):POJ 2135 Farm Tour

    Farm Tour Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: ...

  6. POJ 2135 Farm Tour (最小费用最大流模板)

    题目大意: 给你一个n个农场,有m条道路,起点是1号农场,终点是n号农场,现在要求从1走到n,再从n走到1,要求不走重复路径,求最短路径长度. 算法讨论: 最小费用最大流.我们可以这样建模:既然要求不 ...

  7. poj 2351 Farm Tour (最小费用最大流)

    Farm Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17230   Accepted: 6647 Descri ...

  8. POJ 2135 Farm Tour(最小费用最大流)

    Description When FJ's friends visit him on the farm, he likes to show them around. His farm comprise ...

  9. POJ 2135 Farm Tour (费用流)

    [题目链接] http://poj.org/problem?id=2135 [题目大意] 有一张无向图,求从1到n然后又回来的最短路 同一条路只能走一次 [题解] 题目等价于求从1到n的两条路,使得两 ...

随机推荐

  1. 【Java_基础】Java中Native关键字的作用

    本篇博文转载与:Java中Native关键字的作用

  2. 玩转ApplicationContextAware

    当一个类实现了这个接口之后,这个类就可以方便地获得 ApplicationContext 中的所有bean.换句话说,就是这个类可以直接获取Spring配置文件中,所有有引用到的bean对象.结合工厂 ...

  3. js 字符串加密

    加密: 1.获得要加密的字符串:var str=input.value; 2.转化: for(var i=0;i<str.length;i++){ str+=String.fromCharCod ...

  4. 【STL初步】不定长数组:vector + 集合:set + 映射:map

    一.vector 为了节省空间,有时我们会使用动态数组vector. 定义动态数组 vector<类型名>变量名 vector<int>que //定义que为一个int类型的 ...

  5. 剑指Offer(书):调整数组顺序使奇数位于偶数前面

    题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. public void ...

  6. java读写串口数据

    本博文参考自https://www.cnblogs.com/Dreamer-1/p/5523046.html 最近接触到了串口及其读写,在此记录java进行串口读写的过程. 1.导入串口支持包 需要下 ...

  7. C#保存图片到文件夹区分8位和24位

    1.保存图像--24位位图(显示的图像,包括增加结果到界面上的数据) Image image2 = default(Image); image2 = cogRecordDisplay1.CreateC ...

  8. Linux下文件打包与解包

    打包(.tar):  tar -cvf Pro.tar /home/lin/Pro   #将/home/lin/Pro文件夹下的所有文件打包成Pro.tar 打解包(.tar.gz)  tar -cv ...

  9. Windows同步阿里云时间

    Ctrl+R打开cmd命令框 输入:gpedit.msc 计算机配置”—“管理模版”—“系统”—“Windows 时间服务”—“时间提供程序”—“配置 Windows NTP 客户端 双击打开配置 W ...

  10. MySQL5.7 MTS work线程stack

    复制现象是,slave线程状态正常,但是sql 线程不应用,所以delay越来越大,查看复制状态 mysql> show slave status\G********************** ...