#include<bits/stdc++.h>
using namespace std;
long long N,a[200009];
long long const inf=1000000000000;
vector<long long>G[200009],T[200009];
long long dp[200009][6];
int posecen[200009];
void rekG(int x,int dubina){
  posecen[x]=dubina;
  for(int i=0; i<G[x].size(); i++){
    int y=G[x][i];
    if(posecen[y]>0)continue;
    T[x].push_back(y);
    rekG(y,dubina+1);
  }
}
long long min3(long long a,long long b,long long c){
  if(a>b)swap(a,b);
  if(a>c)swap(a,c);
  return a;
}
void rekT(int x){
  dp[x][0]=a[x];
  for(int i=0; i<T[x].size(); i++){
    int y=T[x][i];
    rekT(y);
    if(T[y].size()!=0)dp[x][0]+=min3(dp[y][0],dp[y][1],dp[y][2]);
    dp[x][1]+=dp[y][0];
    dp[x][2]+=min(dp[y][0],dp[y][1]);
  }
  if(T[x].size()==0)dp[x][1]=dp[x][2]=inf;
}
bool nasol[200009];
void rek3(int x,int d){
  if(d==0 or (dp[x][0]<=dp[x][1] and dp[x][0]<=dp[x][2])){
    nasol[x]=true;
    d=3;
  }
  for(int i=0; i<T[x].size(); i++){
    int y=T[x][i];
    if(T[y].size()==0){
      if(!nasol[x])rek3(y,0);
    }
    else rek3(y,d-1);
  }

}
int main(){
  //freopen("A12.txt","r",stdin);
  ios_base::sync_with_stdio(false);
  cin>>N;
  for(int i=1; i<=N; i++)cin>>a[i];
  for(int i=1; i<N; i++){
    int u,v;
    cin>>u>>v;
    G[u].push_back(v);
    G[v].push_back(u);
  }
  int poc=0;
  for(int i=1; i<=N; i++)if(G[i].size()==1)poc=i;
  rekG(poc,1);
  rekT(poc);
  //for(int i=1; i<=N; i++)cout<<dp[i][0]<<" "<<dp[i][1]<<" "<<dp[i][2]<<endl;
  long long sol=0;
  if(dp[poc][0]<=dp[poc][1]){
    sol=dp[poc][0];
    rek3(poc,0);
  }
  else{
    sol=dp[poc][1];
    rek3(poc,1);
  }
  vector<int>plavi,crveni;
  for(int i=1; i<=N; i++){
    if(!nasol[i])continue;
    if(posecen[i]%2==1)plavi.push_back(i);
    if(posecen[i]%2==0)crveni.push_back(i);
  }
  cout<<sol<<endl;
  cout<<plavi.size()<<endl;
  for(int i=0; i<plavi.size(); i++)cout<<plavi[i]<<" ";
  cout<<endl;
  cout<<crveni.size()<<endl;
  for(int i=0; i<crveni.size(); i++)cout<<crveni[i]<<" ";
  cout<<endl;
  return 0;
}