最短路对应费用,路径数量对应流量。为限制点经过次数,拆点为边。跑一次流量为2的最小费用最大流。

最小费用最大流和最大流EK算法是十分相似的,只是把找增广路的部分换成了求费用的最短路。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const int maxv = +;
const int maxe = +; struct Edge
{
int v,cap,cost,nxt;
void IN(int V,int C,int c,int N)
{
v = V; cap = C; cost = c; nxt = N;
}
}edges[maxe]; int head[maxv],ecnt,vcnt; void AddEdge(int u,int v,int C,int c)
{
edges[ecnt].IN(v,C,c,head[u]);
head[u] = ecnt++;
edges[ecnt].IN(u,,-c,head[v]);
head[v] = ecnt++;
}
const int INF = 0x3f3f3f3f;
int S,T;
bool vis[maxv];
int d[maxv],p[maxv],a[maxv];
bool spfa()
{
memset(d,0x3f,sizeof(int)*vcnt);
memset(vis,,sizeof(bool)*vcnt); queue<int> q; q.push(S); d[S] = ;
a[S] = INF;
while(q.size()){
int u = q.front(); q.pop();
vis[u] = false;
for(int i = head[u]; ~i; i = edges[i].nxt){
Edge &e = edges[i];
if(e.cap&& d[e.v] > d[u]+e.cost){
d[e.v] = d[u] + e.cost;
p[e.v] = i;
a[e.v] = min(a[u],e.cap);
if(!vis[e.v]) { q.push(e.v); vis[e.v] = true; }
}
}
}
return d[T] != INF;
} ll MinCostMaxFlow()
{
ll cost = ;
while(spfa()){
cost += d[T];
for(int i = T; i != S; i = edges[p[i]^].v){
edges[p[i]].cap -= a[T];
edges[p[i]^].cap += a[T];
}
}
return cost;
} int pin[maxv],pout[maxv]; int main()
{
//freopen("in.txt","r",stdin);
int v,e;
int S = ; T = ;
while(~scanf("%d%d",&v,&e)){ vcnt = ; ecnt = ;
pin[] = pout[] = vcnt++;
pin[v] = pout[v] = vcnt++;
for(int i = ; i < v; i++) {
pin[i] = vcnt++;
pout[i] = vcnt++;
}
memset(head,-,sizeof(int)*(vcnt));
AddEdge(S,pin[],,);
AddEdge(pout[v],T,,);
for(int i = ; i < v; i++) AddEdge(pin[i],pout[i],,);
while(e--){
int u,v,c; scanf("%d%d%d",&u,&v,&c);
AddEdge(pout[u],pin[v],,c);
}
printf("%lld\n",MinCostMaxFlow());
}
return ;
}

UVA - 1658 Admiral (最小费用最大流)的更多相关文章

  1. UVa 1658 Admiral(最小费用最大流)

    拆点费用流 --------------------------------------------------------------------- #include<cstdio> # ...

  2. UVa 1658 - Admiral(最小费用最大流 + 拆点)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. UVA 1658 海军上将(拆点法+最小费用限制流)

    海军上将 紫书P375 这题我觉得有2个难点: 一是拆点,要有足够的想法才能把这题用网络流建模,并且知道如何拆点. 二是最小费用限制流,最小费用最大流我们都会,但如果限制流必须为一个值呢?比如这题限制 ...

  4. uva 1658 Admiral (最小费最大流)

    uva 1658 Admiral 题目大意:在图中找出两条没有交集的线路,要求这两条线路的费用最小. 解题思路:还是拆点建图的问题. 首先每一个点都要拆成两个点.比如a点拆成a->a'.起点和终 ...

  5. UVA1658 Admiral 拆点法解决结点容量(路径不能有公共点,容量为1的时候) 最小费用最大流

    /** 题目:UVA1658 Admiral 链接:https://vjudge.net/problem/UVA-1658 题意:lrj入门经典P375 求从s到t的两条不相交(除了s和t外,没有公共 ...

  6. UVa 10806 Dijkstra,Dijkstra(最小费用最大流)

    裸的费用流.往返就相当于从起点走两条路到终点. 按题意建图,将距离设为费用,流量设为1.然后增加2个点,一个连向节点1,流量=2,费用=0;结点n连一条同样的弧,然后求解最小费用最大流.当且仅当最大流 ...

  7. UVA 10806 最小费用最大流

    终于可以写这道题的题解了,昨天下午纠结我一下下午,晚上才照着人家的题解敲出来,今天上午又干坐着想了两个小时,才弄明白这个问题. 题意很简单,给出一个无向图,要求从1 到 n最短路两次,但是两次不允许经 ...

  8. UVA - 1658 Admiral

    3. C - Admiral 题意:给定v(3<=v<=1000)个节点,e(3<=e<=10000)条边的又向加权图,求1->v的两条不相交的路径,使得权和最小. 思路 ...

  9. [板子]最小费用最大流(Dijkstra增广)

    最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...

随机推荐

  1. 1.7-1.12 MapReduce Wordflow

    一.案例运行MapReduce Wordflow 1.准备examples [root@hadoop-senior oozie-4.0.0-cdh5.3.6]# pwd /opt/cdh-5.3.6/ ...

  2. python之文件的读写(2)

    小R昨天因为在研究weblogic的漏洞就没来得及学习python(好吧,这都是借口,懒了,大家可不能像我这样.要坚持每天都学).   这个进度是有点慢呀.哎呀,没事没事,我还年轻,才20岁.  哈哈 ...

  3. SmartSql使用教程(1)——初探,建立一个简单的CURD接口服务

    一.引言 最近SmartSql被正式引入到了NCC,借着这个契机写一个使用教程系列 二.SmartSql简介[摘自官方文档] 1. SmartSql是什么? SmartSql = MyBatis + ...

  4. android摄像头获取图像——第三弹

    相机获取图像的格式问题 android中承认的格式的参考网址为 :http://developer.android.com/reference/android/graphics/ImageFormat ...

  5. 【Aizu - ALDS1_7_A】Rooted Trees(树的表达)

    Rooted Trees Descriptions: A graph G = (V, E) is a data structure where V is a finite set of vertice ...

  6. SQL必知必会03 计算字段 获取当前日期时间 日期时间格式化

  7. mysql驱动包下载

  8. bzoj 4318 || 洛谷P1654 OSU!

    https://www.lydsy.com/JudgeOnline/problem.php?id=4318 https://www.luogu.org/problemnew/show/P1654 看来 ...

  9. 用注解@DelcareParents实现引用增强

    引用增强,是一个比较特殊的增强,不同于其他方法级别的增强. 引用增强可以实现:一个Java类,没有实现A接口,在不修改Java类的的情况下,使其具备A接口的功能. 先看看背景,我们有个Love接口: ...

  10. Spark Mllib里如何删除每一条数据中所有的双引号“”(图文详解)

    不多说,直接上干货! 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第13章 使用决策树二元分类算法来预测分类StumbleUpon数据集