int dfs(int c, int p){
par[c] = p;
DP[c] = W[c];
for(auto nxt : links[c]){
if(nxt == p) continue;
DP[c] += dfs(nxt, c);
}
return DP[c];
}
void solve(){
cin >> N;
rep(i, 0, N-1){
int u, v; cin >> u >> v;
links[u].push_back(v);
links[v].push_back(u);
}
rep(i, 1, N+1) cin >> W[i];
int SUM = dfs(1, -1);
int ans = 2e9;
pii ans2 = {-1, -1};
rep(i, 2, N+1) if(ans > abs(DP[i] - (SUM - DP[i]))){
ans = abs(DP[i] - (SUM - DP[i]));
ans2 = {i, par[i]};
}
cout << ans << '\n';
cout << ans2.first << ' ' << ans2.second << '\n';
}