【网络流24题】航空路线问题(最大费用流)

航空路线问题要求找到两条除起终点外无相交点的最长路径,这可以通过最大费用流问题解决。在拆点并限制直航连接方向后,设置起点到终点的边流量为2,确保找到两条独立路径。为输出方案,需要记录边的初始容量,并通过DFS搜索正向边(i%2==0)来确定路径。
摘要由CSDN通过智能技术生成

传送门

    航空路线问题
    题意:给定起终点,找出两条除起终点之外无相交点的最长路径.

I think

    最大费用流问题.拆点后对于直航< a,b>,仅当a< b时连边(若当a>b时也连边,则出现正环,SPFA无法求解),将点1与点N所连边流量设置为2,相当于找出两条除起点与终点之外无重合的路径.
    输出方案时只依靠pre回头找常常是行不通的,因为如果不特殊处理,你无法知道若干条流什么时候汇,什么时候分.因此还是”备份”一下边容量的初始状态,再dfs找有流经过的边.注意只选择正向边(i%2==0).
    类似数字梯形的某要求.

Code

#include<iostream>
#include<cstdio>
#include<string>
#include<queue>
#include<map>
using namespace std;

const int sm = 205;
const int sn = 1e4;
const int Inf = 0x3f3f3f3f;

int N,M,S,T,tot=1;
int to[sn],nxt[sn],hd[sm],c[sn],f[sn];
int pre[sm],vis[sm],cst[sm],ord[sm];
map<string,int>msi;
map<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值