最短路对应费用,路径数量对应流量。为限制点经过次数,拆点为边。跑一次流量为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. Cpython 解释器下实现并发编程

    背景知识: 顾明思议: 进程即正在执行的一个过程,进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统, 是操作系统最核心的概念,也是操作系统提供的最古老的最重要的抽象概念之一.操作系统的其他所 ...

  2. qq开放平台可以应用到网页游戏的api整理

    创建角色界面api整理 一.需求描述 1.  创建角色名称可以用qq空间昵称代替 2.  如果玩家是在新区玩的话,赠送老玩家支持礼包 3.  可以看到,好友xxx也在玩,而且到了多少等级,如果加为好友 ...

  3. Java对象池示例

    单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数.对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加 ...

  4. [3dmax教程] 人物+骨骼+蒙皮+动画教程

    人物+骨骼+蒙皮+动画完整教程选准备好一个人,做人的方法我在这里就不做了,大家可以学都用poser来做一个.  在大腿里建立4根骨骼! 在前视图中移动如图所示位置! 做一段简单的骨骼向前伸的动画,做4 ...

  5. mysql 5.6 安装x64版本

    从mysql下载的 32bit的 msi installer 后 , 安装的时候没有发现选择x64的地方, 最后安装完毕后发现server是32bit的,只能删除server(  installer ...

  6. WPF Set connectionId threw an exception异常 以及重复dll的问题

    1.DataOutputWPF 在显示norlib.Basic.UserConfigControl时 抛出异常 xmlparsingException : WPF Set connectionId t ...

  7. 织梦cms 应急响应 修复建议

    通过分析log日志,可以知道攻击者的IP 攻击时间 和具体操作 本片文章为内网测试,通过分析日志,进行复现攻击流程,同时对网站的后门给予修复建议 通过分析日志可以知道,攻击者使用了扫描工具进行网站扫描 ...

  8. PJzhang:百度网盘是如何泄露公司机密的?

    猫宁!!! 参考链接:https://mp.weixin.qq.com/s/PLELMu8cVleOLlwRAAYPVg 百度网盘在中国一家独大,百度超级会员具有很多特权,尤其是在下载速度上,是普通会 ...

  9. Java 工程师面试题和笔试题整理(一)

    根据自己之前收集的还有一部分自己面试的整理出来,希望能帮到面试的兄弟(2017). 海科融通 笔试题 1.有一个字符串,如果要在其中查找一个子串,都有哪些方式,写出你认为最好的一个. 2.写出线程都有 ...

  10. [題解]luogu_P2055假期的宿舍(二分圖最大匹配)

    雖然是裸題但是仍然沒有看出來...... 1.每個人都對應一張床(可以的話),這樣把人和床看成點,對應關係就是邊,跑最大匹配看匹配數量夠不夠即可 2.連邊條件:如果一個學生且不回家,那麼他可以睡自己的 ...