이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
/* 
// is short or still long ???
hollwo_pelw's template(short)
// Note : -Dhollwo_pelw_local
*/
#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/trie_policy.hpp>
// #include <ext/rope>
using namespace std;
// using namespace __gnu_pbds;
// using namespace __gnu_cxx;
void FAST_IO(string filein = "", string fileout = "", string fileerr = ""){
	if (fopen(filein.c_str(), "r")){
		freopen(fileout.c_str(), "w", stdout);
		freopen(filein.c_str(), "r", stdin);
#ifdef hollwo_pelw_local
		freopen(fileerr.c_str(), "w", stderr);
#endif
	}
	cin.tie(0), cout.tie(0) -> sync_with_stdio(0);
}
void Hollwo_Pelw();
signed main(){
#ifdef hollwo_pelw_local
	FAST_IO("input.inp", "output.out", "error.err");
	auto start = chrono::steady_clock::now();
#else
	FAST_IO("hollwo_pelw.inp", "hollwo_pelw.out");
#endif
	int testcases = 1;
	// cin >> testcases;
	for (int test = 1; test <= testcases; test++){
		// cout << "Case #" << test << ": ";
		Hollwo_Pelw();
	}
#ifdef hollwo_pelw_local
	auto end = chrono::steady_clock::now();
	cout << endl;
	cout << "Excution time : " << chrono::duration_cast<chrono::milliseconds> (end - start).count() << "[ms]" << endl;
#endif
	return 0;
}
const int N = 1e5 + 5, inf = 2e9;
vector<pair<int, int>> adj[N];
int n, m, q, dis[N], res[N];
struct data_t {
	int d, u;
	data_t (int _d = 0, int _u = 0)
		: d(_d), u(_u) {}
	bool operator < (const data_t &o) const {
		return d > o.d;
	}
};
priority_queue<data_t> pq;
int par[N], vis[N];
set<int> query[N];
inline int find(int u) {
	return par[u] == u ? u : par[u] = find(par[u]);
}
inline void merge(int u, int v, int w) {
	if ((u = find(u)) == (v = find(v)))
		return ;
	if (query[u].size() < query[v].size())
		swap(u, v);
	for (auto x : query[v]) {
		if (query[u].count(x)) {
			res[x] = w;
			query[u].erase(x);
		} else {
			query[u].insert(x);
		}
	}
	par[v] = u;
}
void Hollwo_Pelw() {
	cin >> n >> m;
	for (int u, v, w; m --; ) {
		cin >> u >> v >> w;
		adj[u].emplace_back(v, w);
		adj[v].emplace_back(u, w);
	}
	fill(dis + 1, dis + n + 1, inf);
	cin >> m;
	for (int u; m --; )
		cin >> u, pq.emplace(dis[u] = 0, u);
	while (!pq.empty()) {
		int u = pq.top().u, d = pq.top().d; pq.pop();
		if (dis[u] != d) continue ;
		for (auto ed : adj[u]) {
			int v = ed.first, w = ed.second;
			if (dis[v] > d + w)
				pq.emplace(dis[v] = d + w, v);
		}
	}
	
	cin >> q;
	for (int i = 1, s, t; i <= q; i++) {
		cin >> s >> t;
		query[s].insert(i);
		query[t].insert(i);
	}
	iota(par + 1, par + n + 1, 1);
	vector<pair<int, int>> order;
	for (int i = 1; i <= n; i++)
		order.emplace_back(dis[i], i);
	sort(order.rbegin(), order.rend());
	for (auto it : order) {
		int u = it.second;
		vis[u] = 1;
		for (auto ed : adj[u]) {
			int v = ed.first;
			if (vis[v]) merge(u, v, it.first);
		}
	}
	for (int i = 1; i <= q; i++)
		cout << res[i] << '\n';
}
컴파일 시 표준 에러 (stderr) 메시지
plan.cpp: In function 'void FAST_IO(std::string, std::string, std::string)':
plan.cpp:18:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |   freopen(fileout.c_str(), "w", stdout);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
plan.cpp:19:10: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |   freopen(filein.c_str(), "r", stdin);
      |   ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~| # | 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... |