This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
const int nax = (int)1e5 + 1;
list<int>comp[nax];
int l[nax], opasnost[nax], ans[nax];
vector<vector<pair<int,int>>>queries(nax), adj(nax);
inline int f(int a){
	if (l[a] == a)return  a;
	return l[a] = f(l[a]);
}
inline bool Merge(int a, int b, int c){
	a = f(a), b = f(b);
	if (a == b)return false;
	if (comp[a].size() < comp[b].size())swap(a,b);
	for (auto p : comp[b]){
		for (auto q : queries[p]){
			if (!ans[q.second] && f(q.first) == a){
				//cout << p << " " << q.first << endl;
				ans[q.second] = c;
			}
		}
	}
	comp[a].splice(comp[a].end(), comp[b]);
	l[b] = a;
	return true;
}
void solve(){
	int n, m;
	cin >> n >> m;
	vector<vector<int>>edges;	
	for (int i = 0; i < n; i++){
		comp[i].push_back(i);
		l[i] = i;
		opasnost[i] = (int)1e9;
	}
	for (int i = 0; i < m; i++){
		int a,b,c;
		cin >> a >> b >> c;
		--a,--b;
		adj[a].push_back({b,c});
		adj[b].push_back({a,c});
		edges.push_back({a,b,c});
	}
	int npp;
	cin >> npp;
	
	priority_queue<pair<int,int>>pq;
	for (int i = 0; i < npp; i++){
		int a; cin >> a; 
		--a;
		opasnost[a] = 0;
		pq.push({0,a});
	}
	while(!pq.empty()){
		int node = pq.top().second;
		int op = -pq.top().first;
		pq.pop();
		if (op != opasnost[node])continue;
		for (auto [x,w] : adj[node]){
			if (opasnost[x] > w + op){
				opasnost[x] = w + op;
				pq.push({-opasnost[x], x});
			}
		}
	}
	sort(edges.begin(), edges.end(), [&](auto x, auto y){
		return min(opasnost[x[0]], opasnost[x[1]]) > min(opasnost[y[0]], opasnost[y[1]]);
	});
	
	int qq;
	cin >> qq;
	for (int i = 0; i < qq; i++){
		int a,b;
		cin >> a >> b;
		--a,--b;
		queries[a].push_back({b,i});
		queries[b].push_back({a,i});
	}
	for (int i = 0; i < m; i++){
		//cout << edges[i][0] << " " << edges[i][1] << endl;
		Merge(edges[i][0], edges[i][1], min(opasnost[edges[i][0]], opasnost[edges[i][1]]));
	}
	for (int i = 0; i < qq; i++){
		cout << ans[i] << '\n';
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	solve();
	return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |