#include <bits/stdc++.h>

using namespace std;

int aps(int a){
    return a>=0?a:(-1)*a;
}

struct zacenu{
    long long c;
    int i;
};

bool oksort(zacenu a,zacenu b){
    return a.c<=b.c;
}

bool oksort2(zacenu a,zacenu b){
    return a.i<b.i;
}

vector <int> veze[200010];
int dveze[200010];
zacenu cena[200010];
int obojen[200010];

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    int i,j;
    for(i=0;i<n;i++){
        dveze[i]=0;
        cin>>cena[i].c;
        cena[i].i=i;
        obojen[i]=0;
    }
    int s,c;
    bool sl1=true;
    for(i=0;i<n-1;i++){
        cin>>s>>c;
        s--;
        c--;
        veze[s].push_back(c);
        veze[c].push_back(s);
        (dveze[s])++;
        (dveze[c])++;
        if(aps(s-c)>1){
            sl1=false;
        }
    }
    if(dveze[0]==n-1){
        long long ukupno=0;
        for(i=1;i<n;i++){
            ukupno+=cena[i].c;
        }
        if(ukupno<cena[0].c){
            cout<<ukupno<<endl;
            cout<<n-1<<endl;
            for(i=2;i<=n;i++){
                cout<<i<<" ";
            }
            cout<<endl;
            cout<<"0"<<endl;
        }
        else{
            cout<<cena[0].c<<endl;
            cout<<"1"<<endl<<"1"<<endl<<"0"<<endl;
        }
    }
    else if(sl1){
        sort(cena,cena+n,oksort);
        int cvor;
        for(i=n-1;i>=0;i--){
            cvor=cena[i].i;
            if(cvor>1 && obojen[cvor-1]==1 && obojen[cvor-2]==1){
                obojen[cvor]=4;
            }
            else if(cvor<n-2 && obojen[cvor+1]==1 && obojen[cvor+2]==1){
                obojen[cvor]=4;
            }
            else if(cvor>0 && cvor<n-1 && obojen[cvor-1]==1 && obojen[cvor+1]==1){
                obojen[cvor]=4;
            }
            else if(cvor==n-2 && obojen[cvor+1]==1){
                obojen[cvor]=4;
            }
            else if(cvor==1 && obojen[cvor-1]==1){
                obojen[cvor]=4;
            }
            else{
                obojen[cvor]=1;
            }
        }
        sort(cena,cena+n,oksort2);
        bool crvena=true;
        long long ukupno=0;
        int brcrvenih=0;
        int brplavih=0;
        for(i=0;i<n;i++){
            if(obojen[i]==4){
                ukupno+=cena[i].c;
                if(crvena){
                    obojen[i]=3;
                    brcrvenih++;
                }
                else{
                    obojen[i]=2;
                    brplavih++;
                }
                crvena=(!crvena);
            }
        }
        cout<<ukupno<<endl;
        cout<<brcrvenih<<endl;
        for(i=0;i<n;i++){
            if(obojen[i]==3){
                cout<<(i+1)<<" ";
            }
        }
        cout<<endl;
        cout<<brplavih<<endl;
        for(i=0;i<n;i++){
            if(obojen[i]==2){
                cout<<(i+1)<<" ";
            }
        }
        cout<<endl;
    }
    return 0;
}