P2245 星際導航

2022-05-16 00:58:43 字數 1794 閱讀 3275

sideman 做好了回到gliese星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,

我們可以認為宇宙是一張有n 個頂點和m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,

而邊權則是航行的危險程度。

sideman 現在想把危險程度降到最小,具體地來說,就是對於若干個詢問(a,b),sideman 想知道從頂點a

航行到頂點b 所經過的最危險的邊的危險程度值最小可能是多少。作為 sideman的同學,你們要幫助sideman

返回家園,兼享受安全美妙的宇宙航行。所以這個任務就交給你了。

輸入格式:

第一行包含兩個正整數n和m,表示點數和邊數。

之後m行,每行三個整數a,b和l,表示頂點a和b之間有一條邊長為l的邊。頂點從1開始標號。

下面一行包含乙個正整數q,表示詢問的數目。

之後q行,每行兩個整數 a和b,表示詢問a和b之間最危險的邊危險程度的可能最小值。

輸出格式:

對於每個詢問, 在單獨的一行內輸出結果。如果兩個頂點之間不可達, 輸出impossible。

輸入樣例#1:

4 5

1 2 5

1 3 2

2 3 11

2 4 6

3 4 4

32 3

1 41 2

輸出樣例#1:

5

45

對於 40%的資料,滿足 n≤1000,m≤3000,q≤1000

對於 80%的資料,滿足 n≤10000,m≤105,q≤1000

對於 100% 的資料,滿足 n≤105,m≤3×105,q≤105,l≤109,資料不保證沒有重邊和自環。

kruskal重構樹裸題,做法同貨車運輸

最危險的邊危險程度的可能最小值,也就是最大值最小

我們邊權按公升序排序,val[lca(x,y)]即為答案

#includeusing

namespace

std;

const

int maxn=200000+100,maxm=200000+100,md=20+5

;int

head[maxn],val[maxn],f[maxn],dep[maxn],lg[maxn];

intff[maxn][md];

int size=0,cnt=0

;struct

tree

e[maxm

<<1

];struct

edge

e[maxm

<<1

];int

n,m;

void

init()

int find(int

x)void addedge(int u,int

v)inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}bool cmp(const edge&a,const edge&b)

void

kruskal()

}}void dfs(int u,int

fa)}

int lca(int x,int

y)int

main()

return0;

}

view code

P2245 星際導航

sideman做好了回到gliese星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有 n 個頂點和 m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman現在想把危險程度降到最小...

洛谷P2245 星際導航

sideman做好了回到gliese 星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有n 個頂點和m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman 現在想把危險程度降到最小...

P2245 星際導航 瓶頸路

sideman 做好了回到 text 星球的硬體準備,但是 text 的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有 n 個頂點和 m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。text 現在想把危險程度降到最小,具...