# include "factories.h"
# include <bits/stdc++.h>
# define ll long long
# define vi vector<int>
# define pb push_back
# define pii pair<int, int>
# define fi first
# define se second
using namespace std;
int n, a[500005], b[500005], d[500005];
ll dist[2][5005], ans;
vector<pii> adj[5005];
set<int> A, B;
void dfs(int x, int p) {
dist[0][x]=1e14;
dist[1][x]=1e14;
if(A.count(x)) dist[0][x]=0;
if(B.count(x)) dist[1][x]=0;
for(auto i : adj[x]) {
if(i.fi==p) continue;
dfs(i.fi, x);
dist[0][x]=min(dist[0][x], dist[0][i.fi]+i.se);
dist[1][x]=min(dist[1][x], dist[1][i.fi]+i.se);
}
// cout << "cur " << x << " : " << dist[0][x] << " " << dist[1][x] << endl;
ans=min(ans, dist[0][x]+dist[1][x]);
}
void Init(int N, int A[], int B[], int D[]) {
n=N;
for(int i=1; i<n; i++) a[i]=A[i-1], b[i]=B[i-1], d[i]=D[i-1];
for(int i=1; i<n; i++) {
adj[a[i]].pb({b[i], d[i]});
adj[b[i]].pb({a[i], d[i]});
}
}
long long Query(int S, int X[], int T, int Y[]) {
A.clear();
B.clear();
for(int i=0; i<S; i++) A.insert(X[i]);
for(int i=0; i<T; i++) B.insert(Y[i]);
ans=1e14;
dfs(0, -1);
return ans;
}