洛谷 4568 JLOI2011 飛行路線

2022-04-29 20:09:10 字數 841 閱讀 2688

題目戳這裡

一句話題意:

有n個點,m條邊的有向圖,最多可以把k條邊變為0,求從起點到終點最短距離。

solution

首先看到這題目,感覺賊難,看起來像dp,貌似也有大佬這麼做,但鑑於本蒟蒻思維能力有限,經過大佬點撥後拿出了失傳已久的絕技——分層圖!(廢話真多).

那麼我們就可以愉快地建圖了,根據題意,建出k+1層圖,每條邊從上一層到下一層的邊權為0,每次從一層到下一層,就相當於用了一次0邊,從0層起點到k層終點,正好用了k次。另外需要注意的是,因為邊數太多,裸的spfa會被卡。

coding

#includeusing namespace std;

const int n = 1e5;

struct road

e[n*50+5];

int n,m,s,t,head[n*10+5],cnt,k;

inline int read()

while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();

return x*w;

}void add(int x,int y,int w)

int vis[n*10+5],dis[n*10+5];

void dijkstra()}}

}}int main()

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

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

add(t+(i-1)*n,t+i*n,0);

dijkstra();

cout<

luoguP4568 JLOI2011 飛行路線

題目中 k 的大小只有 10,我們可以考慮建立分層圖跑最短路 相同層中 a b 的權值仍為 val,不同層中 a b 的權值為 0,相當於免費乘坐了一次飛機 寫乙個最短路就可以啦 include define cios ios sync with stdio false define for i,a...

P4568 JLOI2011 飛行路線

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

P4568 JLOI2011 飛行路線

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