Cod sursa(job #2537433)

Utilizator mirceaisherebina mircea mirceaishere Data 3 februarie 2020 17:59:48
Problema A+B Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
#include <vector>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
ifstream fin("parb.in");
ofstream fout("parb.out");

int n, i, j, k, v[500010], maxim, x, y, ok, nod;
vector<int>a[500010];
queue<int>solutie;
char ch;

bool cmp(int a, int b){
    return a>b;
}

int main(){
    fin>>n;
    for(i=1; i<=n; i++){
        fin>>ch;
        v[i]=ch;
        maxim=max(maxim, v[i]);
    }
    for(i=1; i<n; i++){
        fin>>x>>y;
        a[x].push_back(y);
    }
    for(i=1; i<=n; i++){
        sort(a[i].begin(), a[i].end(), cmp);
        if(v[i]==maxim){
            solutie.push(i);
        }
    }
    fout<<(char)maxim;
    ok=1;
    while(ok){
        ok=0;
        maxim=0;
        for(i=0; i<solutie.size(); i++){
            nod=solutie[i];
            if(!v[nod].empty()){
                maxim=max(maxim, v[nod][0]);
            }
        }
        if(maxim==0){
            return 0;
        }else{
            fout<<(char)maxim;
        }
        int aux=solutie.size();
        for(i=0; i<aux; i++){
            nod=solutie[0];
            if(!v[nod].empty() || v[nod]!=maxim){
                solutie.pop();
            }else{
                solutie.push(nod);
                solutie.pop();
            }
        }
    }
}