JLOI2011 飛行路線

2021-07-22 14:45:01 字數 1344 閱讀 6574

提交傳送門

師兄們覺得我是不是很挫啊,做了1天多才做出這道裸spfa…

人家只是試著打了一下拆點而已嘛……

就是spfa只是2維而已

d[i][0]代表第i個點 不用免費次數時得最小距離

d[i][1]代表第i個點 用免費次數時得最小距離

就很簡單了是不是?

description

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

input

資料的第一行有三個整數,n,m,k,分別表示城市數,航線數和免費乘坐次數。第二行有兩個整數,s,t,分別表示他們出行的起點城市編號和終點城市編號。(0<=s,t

#include

#include

#include

#include

#include

#include

using

namespace

std;

struct nodea[210000];int len,first[110000];

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

int d[110000][11],list[110000][11],head,tail,ans,n,m,p,st,ed;;

bool v[110000][11];

int main()

memset(d,31,sizeof(d));d[st][0]=0;

memset(v,false,sizeof(v));v[st][0]=true;

head=1;tail=2;list[1][0]=st;list[1][1]=0;

while(head!=tail)

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

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

head++;

if(head==100001) head=1;

v[x][c]=false;

}ans=999999999;

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

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

return

0;}

JLOI2011 飛行路線

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

JLOI2011 飛行路線

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

JLOI2011 飛行路線

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