sideman 做好了回到 \textgliese 星球的硬體準備,但是 \textsideman 的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有 nn 個頂點和 mm 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。
\textsideman 現在想把危險程度降到最小,具體地來說,就是對於若干個詢問 (a, b)(a,b),\textsideman 想知道從頂點 aa 航行到頂點 bb 所經過的最危險的邊的危險程度值最小可能是多少。作為 \textsideman 的同學,你們要幫助 \textsideman 返回家園,兼享受安全美妙的宇宙航行。所以這個任務就交給你了。
輸入輸出格式
輸入格式:
第一行包含兩個正整數 nn 和 mm,表示點數和邊數。
之後 mm 行,每行三個整數 aa,bb 和 ll,表示頂點 aa 和 bb 之間有一條邊長為 ll 的邊。頂點從 11 開始標號。
下面一行包含乙個正整數 qq,表示詢問的數目。
之後 qq 行,每行兩個整數 aa 和 bb,表示詢問 aa 和 bb 之間最危險的邊危險程度的可能最小值。
輸出格式:
對於每個詢問, 在單獨的一行內輸出結果。如果兩個頂點之間不可達, 輸出 \textimpossible。
#include
using
namespace std;
const
int maxn =
1e6+5;
int head[maxn]
, top[maxn]
, father[maxn]
;int son[maxn]
, size[maxn]
, depth[maxn]
;int fa[maxn]
, val[maxn]
, l[maxn]
, r[maxn]
, vis[maxn]
;int n, m, q, u, v, tot, cnt, index;
struct node
}a[maxn]
;struct edge edge[maxn]
;int
find
(int x)
void
init()
void
add(
int u,
int v)
void
dfs1
(int u,
int fa)
dfs1
(to, u)
; size[u]
+= size[to];if
(size[to]
> maxson)}}
void
dfs2
(int u,
int topf)
for(
int i = head[u]
; i !=-1
; i = edge[i]
.next)
dfs2
(to, to);}
r[u]
= index;
}int
lca(
int x,
int y)
x = father[top[x]];
}if(depth[x]
> depth[y]
)return x;
}void
kruskal()
sort
(a +
1, a + m +1)
;for
(int i =
1; i <= m; i++)}
for(
int i=
1;i<=cnt;
++i)}}
intmain()
kruskal()
; cin >> q;
while
(q--
) cout << val[
lca(u, v)
]<< endl;
}return0;
}
洛谷P2245 星際導航
sideman做好了回到gliese 星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有n 個頂點和m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman 現在想把危險程度降到最小...
P2245 星際導航
sideman做好了回到gliese星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有 n 個頂點和 m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman現在想把危險程度降到最小...
P2245 星際導航
sideman 做好了回到gliese星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有n 個頂點和m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman 現在想把危險程度降到最小...