BZOJ2763 JLOI2011 飛行路線

2022-05-08 07:48:11 字數 2087 閱讀 8395

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

8對於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.

正解:最短路

解題報告:

直接dijkstra維護最短路,把每個點拆成(k+1)個,構分層圖。分別表示到當前點已經免費乘坐了多少次。

然而我除錯了乙個上午,最後發現原因是什麼呢???

最後知道真相的我眼淚掉下來。。。

我的dijkstra模板是個萎的。。。重申,我用了半年多的模板,曾經集訓的若干考試、北大夏令營都一直用的,ac了無數題目的模板,是乙個萎的。。。

我必須要抽時間把所有的模板重新打一遍,當年留下了多少錯誤。。。

1

//it is made by jump~

2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include

13#ifdef win32

14#define ot "%i64d"

15#else

16#define ot "%lld"

17#endif

18using

namespace

std;

19 typedef long

long

ll;20

const

int inf = (1

<<30

);21

const

int maxn = 200011;22

const

int maxm = 5000011;23

intn,m,k,s,t,ecnt;

24int

first[maxn],to[maxm],next[maxm],w[maxm];

25int

ans;

26bool

pd[maxn];

2728

struct

node

33 }a[maxn*11

];34

35 priority_queue q;

3637 inline int

getint()

3846

47 inline void

dij()76}

77}78 ans=inf;

79for(int i=0;i<=k;i++) ans=min(ans,a[i*n+t].dis);

80//

for(int i=0;i<=k;i++) ans=min(a[t][i].dis,ans);

81 printf("%d"

,ans);82}

8384 inline void link(int x,int y,int z)

8788 inline void

work()96}

97}98dij();99}

100101

intmain()

102

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...

bzoj 2763 JLOI2011 飛行路線

description n個點,m條雙向邊,有k次免費的機會,問最短路。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 8這道題基本演算法是spfa,但需要定乙個f的二維陣列,f i j 表示到編號...