BZ2763 JLOI2011 飛行路線

2022-05-10 03:11:22 字數 1205 閱讀 2723

alice和bob現在要乘飛機旅行,他們選擇了一家相對便宜的航空公司。該航空公司一共在n個城市設有業務,設這些城市分別標記為0到n-1,一共有m種航線,每種航線連線兩個城市,並且航線有一定的**。alice和bob現在要從乙個城市沿著航線到達另乙個城市,途中可以進行轉機。航空公司對他們這次旅行也推出優惠,他們可以免費在最多k種航線上搭乘飛機。那麼alice和bob這次出行最少花費多少?

資料的第一行有三個整數,n,m,k,分別表示城市數,航線數和免費乘坐次數。

第二行有兩個整數,s,t,分別表示他們出行的起點城市編號和終點城市編號。(0<=s,t接下來有m行,每行三個整數,a,b,c,表示存在一種航線,能從城市a到達城市b,或從城市b到達城市a,**為c。(0<=a,b只有一行,包含乙個整數,為最少花費。

5 6 1

0 40 1 5

1 2 5

2 3 5

3 4 5

2 3 3

0 2 100

對於30%的資料,2<=n<=50,1<=m<=300,k=0;

對於50%的資料,2<=n<=600,1<=m<=6000,0<=k<=1;

對於100%的資料,2<=n<=10000,1<=m<=50000,0<=k<=10.

分層圖模板,裸到都不用建分層圖的那種==

把狀態加一維\(a[i][k]\)表示到達\(i\)時經過過\(k\)條0邊的最短路徑長度,然後在原圖上跑最短路就行了

#include#include#include#include#define mp make_pair

#define s second

#define f first

using namespace std;

int i,m,n,j,k,a[100001][25],x,y,z,ver[100011],nex[100010],head[100010],cnt,edge[100010],ans=0x3f3f3f3f,s,v;

bool b[100001][25];

priority_queue > > q;

void add(int x,int y,int z)

void dji() }}

int main()

dji();

for(i=0;i<=k;i++) ans=min(ans,a[v][k]);

printf("%d",ans);

}

2763 JLOI2011 飛行路線

time limit 10 sec memory limit 128 mb submit 2636 solved 998 submit status discuss alice和bob現在要乘飛機旅行,他們選擇了一家相對便宜的航空公司。該航空公司一共在n個城市設有業務,設這些城市分別標記為0到n 1...

bzoj 2763 JLOI2011 飛行路線

本題我用的二維spfa,dis i j 表示到i點用掉了j次免費機會的最優值,相當於動態規劃,由於資料十分大,普通spfa會t掉3個點,所以考慮堆優化 相信堆優化大家都懂,所以這些提示就夠了 include include includeusing namespace std struct ddji...

bzoj2763 JLOI2011 飛行路線

time limit 10 sec memory limit 128 mb submit 1367 solved 527 submit status discuss alice和bob現在要乘飛機旅行,他們選擇了一家相對便宜的航空公司。該航空公司一共在n個城市設有業務,設這些城市分別標記為0到n 1...