poj2135 最小费用流
添加超级源点(与点1之间的边容量为2,权值为0)和超级汇点(与点N之间的边容量为2,权值为0),求流量为2的最小费用流。注意是双向边。
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <queue>
- using namespace std;
- const long long INF = 0x3f3f3f3f3f3f3f3f;
- typedef long long ll;
- typedef pair<ll,int> P;
- struct edge
- {
- int to,cap;
- ll cost;
- int rev;
- };
- int V,E;
- vector<edge> G[1005];
- ll h[1005];
- ll dist[1005];
- int prevv[1005];
- int preve[1005];
- void add_edge(int from,int to,int cap,ll cost)
- {
- edge e;
- e.to = to;
- e.cap = cap;
- e.cost = cost;
- e.rev = G[to].size();
- G[from].push_back(e);
- e.to = from;
- e.cap = 0;
- e.cost = -cost;
- e.rev = G[from].size() - 1;
- G[to].push_back(e);
- }
- ll min_cost_flow(int s,int t,int f)
- {
- ll res = 0;
- fill(h,h + V,0);
- while(f > 0)
- {
- priority_queue <P,vector <P>,greater<P> >que;
- fill(dist,dist + V,INF);
- dist[s] = 0;
- que.push(P(0,s));
- while(!que.empty())
- {
- P p = que.top();
- que.pop();
- int v = p.second;
- if(dist[v] < p.first)
- {
- continue;
- }
- for(int i = 0;i < G[v].size();i ++)
- {
- edge & e = G[v][i];
- if(e.cap > 0 && dist[e.to] > dist[v] + e.cost + h[v] - h[e.to])
- {
- dist[e.to] = dist[v] + e.cost + h[v] - h[e.to];
- prevv[e.to] = v;
- preve[e.to] = i;
- que.push(P(dist[e.to],e.to));
- }
- }
- }
- if(dist[t] == INF)
- {
- return -1;
- }
- for(int v = 0;v < V;v ++)
- {
- h[v] += dist[v];
- }
- int d = f;
- for(int v = t;v != s;v = prevv[v])
- {
- d = min(d,G[prevv[v]][preve[v]].cap);
- }
- f -= d;
- res += d * h[t];
- for(int v = t; v != s; v = prevv[v])
- {
- edge & e = G[prevv[v]][preve[v]];
- e.cap -= d;
- G[v][e.rev].cap += d;
- }
- }
- return res;
- }
- int main()
- {
- int a,b;
- ll c;
- cin >> V >> E;
- for(int i = 0;i < E;i ++)
- {
- scanf("%d%d%lld",&a,&b,&c);
- add_edge(a,b,1,c);
- add_edge(b,a,1,c);
- }
- add_edge(0,1,2,0);
- add_edge(V,V + 1,2,0);
- V += 2;
- cout << min_cost_flow(0,V - 1,2) << endl;
- return 0;
- }
poj2135 最小费用流的更多相关文章
- poj2135最小费用流
裸题,就是存个模板 最小费用流是用spfa求解的,目的是方便求解负环,spfa类似于最大流中的bfs过程 #include<map> #include<set> #includ ...
- [poj2135]Farm Tour(最小费用流)
解题关键:最小费用流 代码一:bellma-ford $O(FVE)$ bellman-ford求最短路,并在最短路上增广,速度较慢 #include<cstdio> #include& ...
- poj2135(简单的最小费用流问题)
题目链接:http://poj.org/problem?id=2135 Farm Tour Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
- POJ2195 最小费用流
题目:http://poj.org/problem?id=2195 处理出每个人到每个门的曼哈顿距离,分别建立容量为1费用为曼哈顿距离的边,在源点和每个人人之间建立容量为1费用为0的边,在门和汇点之间 ...
- HDU 4067 hdoj 4067 Random Maze 最小费用流
给出n个点,m条边,入口s和出口t,对于每条边有两个值a,b,如果保留这条边需要花费:否则,移除这条边需要花费b. 题目要求用最小费用构造一个有向图满足以下条件: 1.只有一个入口和出口 2.所有路都 ...
- POJ 2516:Minimum Cost(最小费用流)
https://vjudge.net/problem/11079/origin 题意:有N个商店和M个供应商和K种物品,每个商店每种物品有一个需求数,每个供应商每种物品有一个供应量,供应商到商店之间的 ...
- POJ-2175 Evacuation Plan 最小费用流、负环判定
题意:给定一个最小费用流的模型,根据给定的数据判定是否为最优解,如果不为最优解则给出一个比给定更优的解即可.不需要得出最优解. 解法:由给定的数据能够得出一个残图,且这个图满足了最大流的性质,判定一个 ...
- Going Home (hdu 1533 最小费用流)
集训的图论都快结束了,我才看懂了最小费用流,惭愧啊. = = 但是今天机械键盘到了,有弄好了自行车,好高兴\(^o^)/~ 其实也不是看懂,就会套个模板而已.... 这题最重要的就是一个: 多组输入一 ...
- POJ 2195 Going Home 最小费用流 裸题
给出一个n*m的图,其中m是人,H是房子,.是空地,满足人的个数等于房子数. 现在让每个人都选择一个房子住,每个人只能住一间,每一间只能住一个人. 每个人可以向4个方向移动,每移动一步需要1$,问所有 ...
随机推荐
- VS2008中使用JSONCPP方法小结
Introduction JSON (JavaScript Object Notation) is a lightweight data-interchange format. It can repr ...
- 22.java方法的定义
java中的方法:就相当于c语言中的函数:sun在开发java的时候,为提高其代码的重复利用率,引入了方法. 什么是方法? 方法就是一段代码片段,这个片段可以完成特定的功能,并且可以重复利用. 从入口 ...
- shell脚本自动部署nignx反向代理及web服务器,共享存储
#!/bin/bash systemctl status nginx var=$? ] then yum install epel-release -y ] then echo "epel库 ...
- STL中的vector实现邻接表
/* STL中的vector实现邻接表 2014-4-2 08:28:45 */ #include <iostream> #include <vector> #include ...
- 2 手写Java LinkedList核心源码
上一章我们手写了ArrayList的核心源码,ArrayList底层是用了一个数组来保存数据,数组保存数据的优点就是查找效率高,但是删除效率特别低,最坏的情况下需要移动所有的元素.在查找需求比较重要的 ...
- 小程序接收from表单数据(实例)
html部分 <form bindsubmit='sub'> <view class="con"> <view class="con-nr& ...
- C#基础知识回顾
值类型和引用类型 值类型存在栈上,结构,枚举,数值类型 引用类型存在堆上,数组,类,接口,委托 把值类型存到引用类型中就是封箱,耗时 引用类型中的值类型是存在堆上,不是栈上,但是作为参数传递时,还是会 ...
- MarketServer 日志
2014.04.29 1. 发现有时候会跳出 Exception Infomations: 用户异常信息:Socket未连接 跟踪后发现的一次情况是: 服务器根据客户端请求从后台读取数据后,写数据 ...
- [Xcode 实际操作]九、实用进阶-(31)为IAP(支付方式)内购功能的具体实现和测试
目录:[Swift]Xcode实际操作 本文将演示如何为IAP(支付方式)内购功能的具体实现和测试. 内购是苹果市场上的一种常见的盈利方式. 在项目中确保已经安装了第三方库[Pod],双击[Podfi ...
- Java常见设计模式学习(非原创)
文章大纲 一.策略模式二.观察者模式三.工厂模式四.单例模式五.其他模式六.设计模式总结七.参考文章 一.策略模式 现在假设我们有个"鸭子项目",首先我们用OOP(面向对象)的 ...