BZOJ 2763 飛行路線

2021-07-22 19:54:29 字數 1399 閱讀 8779

2763: [jloi2011]飛行路線

time limit: 10 sec memory limit: 128 mb

description

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

input

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

第二行有兩個整數,s,t,分別表示他們出行的起點城市編號和終點城市編號。(0<=s,t < n)

接下來有m行,每行三個整數,a,b,c,表示存在一種航線,能從城市a到達城市b,或從城市b到達城市a,**為c。(0<=a,b< n,a與b不相等,0<=c<=1000)

output

只有一行,包含乙個整數,為最少花費。

sample input

5 6 1

0 4

0 1 5

1 2 5

2 3 5

3 4 5

2 3 3

0 2 100

sample output

飛行路線這道題不要看題目很長~其實就是乙個spfa

只需要把基礎spfa的記錄結果的陣列開成2維表示到第i個點用j次免費次數就ok啦!

不會spfa的童鞋們經過這道題肯定可以明白啦!

#include

#include

#include

using

namespace

std;

struct node

a[2110000];int len,last[2110000];

void ins(int x,int y,int c)

int mymin(int x,int y)

}if(d[x][c]1] && c1]=d[x][c];

if(v[y][c+1])}}

v[x][c]=true;

head++;

if(head==100000+1) head=1;

}}int main()

spfa();

int ans=99999999;

for(int i=0;i<=k;i++) ans=mymin(ans,d[ed][i]);

printf("%d\n",ans);

return

0;}

BZOJ 2763 飛行路線

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

bzoj2763 飛行路線

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

bzoj2763 飛行路線

這個題是前幾天做的分層圖問題,而且比較直接,多加乙個維度就可以了 include include include include using namespace std struct inter 100010 structes queue qwq int n,m,k,x,y,z,s,t1,tail,...