#include<bits/stdc++.h>
using namespace std;
long long N,a[500009];
long long const inf=1e9+1;
vector<long long>G[500009],T[500009];
long long dp[500009][6];
int posecen[500009];
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];
  if(T[x].size()==0)dp[x][1]=dp[x][2]=inf;
  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]);
  }
}
bool nasol[500009];
void rek3(int x,int d){
  //cout<<x<<" "<<d<<endl;
  if(d==0 or (d>=1 and dp[x][0]<dp[x][1]) or (d==2 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("A11.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<<i<<" : ";
    for(int j=0; j<=2; j++)
      cout<<dp[i][j]<<" ";
    cout<<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);
  }
  //cout<<poc<<endl;
  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;
  long long sol2=0;
  for(int i=0; i<crveni.size(); i++)sol2+=a[crveni[i]];
  for(int i=0; i<plavi.size(); i++)sol2+=a[plavi[i]];
  //cout<<sol2<<"<="<<endl;
  cout<<crveni.size()<<endl;
  for(int i=0; i<crveni.size(); i++)cout<<crveni[i]<<" ";
  if(crveni.size())cout<<endl;

  cout<<plavi.size()<<endl;
  for(int i=0; i<plavi.size(); i++)cout<<plavi[i]<<" ";
  if(plavi.size())cout<<endl;
  return 0;
}
/*
10
4 6 2 8 54 8 56 7 43 7
1   1      1    1    1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
*/