先讓我重新說一下題意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...