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;
void setIO(string name) {
	#ifdef DEBUG
	#else 
	ios_base::sync_with_stdio(0); cin.tie(0);
	freopen((name+".in").c_str(),"r",stdin);
	freopen((name+".out").c_str(),"w",stdout);
	#endif
}
#define int long long 
const int N = 5e4 + 10;
const int LG = log2(N) + 10;
int n,q,timer = 0,l;
vector<pair<int,int>> adj[N];
// array<int,3> edges[N];
int rdist[N],tin[N],tout[N], lcst[N][LG];
void dfs0(int i,int p){
	tin[i] = ++timer;
	lcst[i][0] = p;
	for(int _ = 1;_<=l;_++){
		lcst[i][_] = lcst[lcst[i][_ - 1]][_ - 1];
	}
	for(auto e : adj[i]){
		if(e.first == p)continue;
		rdist[e.first] = rdist[i] + e.second;
		dfs0(e.first,i);
	}
	tout[i] = ++timer;
}
inline int is_ansestor(int u,int v){
	return (tin[u] <= tin[v] && tout[u] >= tout[v]);
}
int lca(int a,int b){
	if(is_ansestor(a,b))
		return a;
	if(is_ansestor(b,a))
		return b;
	for(int i  =l;i>=0;i--){
		if(!is_ansestor(lcst[a][i], b))
			a = lcst[a][i];
	}
	return lcst[a][0];
}
signed main() {
	iostream::sync_with_stdio(false);
	cin.tie(nullptr);cout.tie(nullptr);
	cin >> n;
	l = ceil(log2(n));
	for(int i = 0;i<n - 1;i++){
		int a,b,w;cin >> a >> b >> w;
		adj[a].push_back({b,w});
		adj[b].push_back({a,w});
		// edges[i] = {a,b,w};
	}
	rdist[0] = 0;
	dfs0(0,0);
	int q;cin >> q;
	while(q--){
		array<int,5> nums;
		for(auto &e : nums)cin >> e;
		sort(nums.begin(),nums.end(), [&](int a,int b){
			return tin[a] < tin[b];
		});
		int ans = 0;
		for(unsigned i = 0;i<nums.size();i++){
			int j = (i + 1)%nums.size();
			int a = nums[i],b = nums[j];
			int anc = lca(a,b);
			ans += rdist[a] + rdist[b] - 2*rdist[anc];
		}
		ans /= 2;
		cout << ans << "\n";
	}
}
Compilation message (stderr)
roadsideadverts.cpp: In function 'void setIO(std::string)':
roadsideadverts.cpp:7:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    7 |  freopen((name+".in").c_str(),"r",stdin);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
roadsideadverts.cpp:8:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    8 |  freopen((name+".out").c_str(),"w",stdout);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # | 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... |