JLOI2011 飛行路線

2022-09-09 00:51:35 字數 1533 閱讀 9916

alice和bob現在要乘飛機旅行,他們選擇了一家相對便宜的航空公司。該航空公司一共在nnn個城市設有業務,設這些城市分別標記為000到n−1n-1n−1,一共有mmm種航線,每種航線連線兩個城市,並且航線有一定的**。

alice和bob現在要從乙個城市沿著航線到達另乙個城市,途中可以進行轉機。航空公司對他們這次旅行也推出優惠,他們可以免費在最多kkk種航線上搭乘飛機。那麼alice和bob這次出行最少花費多少?

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

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

接下來有m行,每行三個整數,a,b,ca,b,ca,b,c,表示存在一種航線,能從城市aaa到達城市bbb,或從城市bbb到達城市aaa,**為ccc。

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

輸入 #1

5 6 1

0 40 1 5

1 2 5

2 3 5

3 4 5

2 3 3

0 2 100

【解題思路】

套路題,分層圖。

【code】

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9

10int

read()

1117

while

(isdigit(c))

1822

return

x;23}24

25using

std::priority_queue;

26using

std::pair;

27using

std::vector;

28using

std::make_pair;

29using

std::greater;

3031

struct

edge

32edge[2500001

];35

int cnt,head[110005

];36

37void add_edge(int u,int v,int c=0)38

;40 head[u]=cnt;41}

4243

int dis[110005

];44

bool vis[110005

];45

void dijkstra(int

s)4666}

67}68}

69}7071

intmain()

7287}88

for(int i=1;i<=k;++i)

89//

預防奇葩資料

92dijkstra(s);

93 printf("

%d",dis[t+k*n]);

94return0;

95 }

JLOI2011 飛行路線

提交傳送門 師兄們覺得我是不是很挫啊,做了1天多才做出這道裸spfa 人家只是試著打了一下拆點而已嘛 就是spfa只是2維而已 d i 0 代表第i個點 不用免費次數時得最小距離 d i 1 代表第i個點 用免費次數時得最小距離 就很簡單了是不是?description alice和bob現在要乘飛...

JLOI2011 飛行路線

alice和bob現在要乘飛機旅行,他們選擇了一家相對便宜的航空公司。該航空公司一共在 nnn 個城市設有業務,設這些城市分別標記為 000 到 n 1n 1n 1 一共有 mmm 種航線,每種航線連線兩個城市,並且航線有一定的 alice和bob現在要從乙個城市沿著航線到達另乙個城市,途中可以進行...

JLOI2011 飛行路線

alice和bob現在要乘飛機旅行,他們選擇了一家相對便宜的航空公司。該航空公司一共在 n 個城市設有業務,設這些城市分別標記為 0 到 n 1 一共有 m 種航線,每種航線連線兩個城市,並且航線有一定的 alice和bob現在要從乙個城市沿著航線到達另乙個城市,途中可以進行轉機。航空公司對他們這次...