sideman 做好了回到 \(\text\) 星球的硬體準備,但是 \(\text\) 的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有$ n$ 個頂點和 \(m\) 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。
\(\text\) 現在想把危險程度降到最小,具體地來說,就是對於若干個詢問 \((a, b)\),\(\text\) 想知道從頂點 \(a\)航行到頂點 \(b\) 所經過的最危險的邊的危險程度值最小可能是多少。作為 \(\text\) 的同學,你們要幫助 \(\text\)返回家園,兼享受安全美妙的宇宙航行。所以這個任務就交給你了。
第一行包含兩個正整數 \(n\) 和 \(m\),表示點數和邊數。
之後 \(m\) 行,每行三個整數 \(a\),\(b\) 和 \(l\),表示頂點 \(a\) 和 \(b\) 之間有一條邊長為 \(l\) 的邊。頂點從 \(1\) 開始標號。
下面一行包含乙個正整數 \(q\),表示詢問的數目。
之後 \(q\) 行,每行兩個整數 \(a\) 和 bb,表示詢問 \(a\) 和 \(b\) 之間最危險的邊危險程度的可能最小值。
對於每個詢問, 在單獨的一行內輸出結果。如果兩個頂點之間不可達, 輸出 \(\text\)。
4 5
1 2 5
1 3 2
2 3 11
2 4 6
3 4 4
32 3
1 41 2
5
45
對於 \(40\%\) 的資料,滿足 \(n \leq 1000, m \leq 3000, q \leq 1000\)。
對於 \(80\%\) 的資料,滿足 \(n \leq 10000, m \leq 10^5, q \leq 1000\)。
對於 $100%$100% 的資料,滿足 \(n \leq 10^5, m \leq 3 \times 10^5, q \leq 10^5, l \leq 10^9\)。資料不保證沒有重邊和自環。
乙個無向圖,看到最大邊最小,我去,最小生成樹。。。
然後神奇的發現,題目不保證沒有重邊自環的問題就解決了
於是我們就得到了乙個森林
每次詢問兩個點,如果不在一棵樹中(通過最小生成樹的ufs判斷)輸出無解
否則輸出其路徑上最大邊邊權,顯然倍增搞一下就行了
#include#define ll long long
ll in()
int n, m;
const int maxn = 1e5 + 10;
struct node
void *operator new(size_t)
}*head[maxn];
bool vis[maxn];
int dep[maxn];
struct e
}e[maxn << 2];
int f[maxn][25], max[maxn][25];
int b[maxn];
void add(int from, int to, int dis)
int findset(int x)
void kruskal() }}
void dfs(int x, int fa)
}void beizeng()
}int lca(int x, int y)
return std::max(dis, std::max(max[x][0], max[y][0]));
}void query()
}int main()
P2245 星際導航
sideman做好了回到gliese星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有 n 個頂點和 m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman現在想把危險程度降到最小...
P2245 星際導航
sideman 做好了回到gliese星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有n 個頂點和m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman 現在想把危險程度降到最小...
洛谷P2245 星際導航
sideman做好了回到gliese 星球的硬體準備,但是sideman的導航系統還沒有完全設計好。為了方便起見,我們可以認為宇宙是一張有n 個頂點和m 條邊的帶權無向圖,頂點表示各個星系,兩個星系之間有邊就表示兩個星系之間可以直航,而邊權則是航行的危險程度。sideman 現在想把危險程度降到最小...