2696 航班安排 費用流

2021-07-10 09:46:04 字數 1328 閱讀 9529

先讓我重新說一下題意qwq。 有n

個機場,機場兩兩之間需要的最短時間是fi

,j,花費的費用是乙個固定值ci

,j,有

m 個請求,在

s時刻從

a 機場起飛,在恰好

t時刻到達

b 機場,可以淨獲利cc

,問最大獲利。

也就是說對於路線i−

>

j ,你可以為了恰好到達而多飛一會兒。

資料保證給出的請求是合法的,即一定能從

i 到達j。

然後我們就可以愉快的建圖跑費用流了。

把每個請求拆為兩個點x1

,x2 ,連邊(x

1,x2

,1,c

ci) ,然後對於可達的兩個請求x,

y ,連邊(x

2,y1

,1,−

cbx,

ay) ,然後和源點匯點連邊,即(s

,x1,

1,−c

1,ax

),(x

2,t,

1,−c

bx,1

) ,最後匯點和超級匯點連邊限制流量

k 。

可達性根據距離判斷,由於資料保證兩點之間的距離一定是最短路,所以直接判就行了。

#include

#include

#include

#define inf 1000000007

#define n 405

#define m 100005

using namespace std;

int n,m,k,t,a,t,cnt=1,ans;

int head[n],dis[n],q[n],path[n];

int list[m],next[m],from[m],flow[m],cost[m];

bool vis[n];

int a[n],b[n],st[n],en[n],cc[n];

int f[n][n],c[n][n];

inline int

read()

while (c>='0'&&c<='9')

return a*f;

}inline void insert(int

x,int

y,int z,int w)

inline bool spfa()

}vis[x]=0;

}return dis[t]!=-inf;

}inline void mcf()

int main()

2696 航班安排 費用流

首先我的吐槽一下這題意描述。出題人的語文水平肯定沒我這種語文大渣高 然後我們就直接複製某位不知名的fqk神犇的題解 說的這麼詳細我都不忍心不複製了qaq 建完圖直接跑最小費用最大流 include include include include include include include inc...

BZOJ 2696 航班安排 費用流

題目大意 k架飛機,n個機場,以0.n 1編號,其中0號為基地機場,每天0時刻起飛機從該機場起飛,並不晚於t時刻回到該機場。m個包機請求,每個請求為在s時刻從a機場起飛,在恰好t時刻到達b機場,可以淨獲利c。機場之間來往有花費。求最大收益。將每乙個請求拆成兩個點,在兩個點之間連一條費用為負的完成請求...

國家集訓隊 航班安排 最小費用最大流

對請求拆點建圖 對於乙個請求,如果 0 時刻可以從 0 機場到這裡,那麼 s 向它連邊,流量 infty 費用為 w 結束時間飛回 0 小於時間限制,則向著 t 連邊,費用為 w 兩兩枚舉所有請求,如果來得及就同理連邊 最後別忘了限制一下總流量 跑最小費用最大流即可 include using na...