Pagini recente » Cod sursa (job #190592) | Cod sursa (job #1801427) | Cod sursa (job #1104253) | Cod sursa (job #1665123) | Cod sursa (job #2537433)
#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();
}
}
}
}