Cod sursa(job #2090163)

Utilizator andreiutu111Noroc Andrei Mihail andreiutu111 Data 17 decembrie 2017 17:44:38
Problema Dosare Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
struct fisier{
    int val,ind,nr;
}v[16001];
int N,x,s,pas[16001];
bool n[16001];
vector <int> G[16001];
bool cmp(fisier X,fisier Y){
    return X.nr>Y.nr;
}
void dfs(int nod,int nr){
    n[nod]=1,++nr,pas[nod]=nr;
    for(int i=0;i<G[nod].size();++i)
        if(!n[G[nod][i]])
            dfs(G[nod][i],nr),++nr;
}
int main()
{
    f>>N;
    v[1].ind=1;
    for(int i=2;i<=N;++i)f>>v[i].val,++v[v[i].val].nr,v[i].ind=i;
    sort(v+2,v+N+1,cmp);
    for(int i=2;i<=N;++i)G[v[i].val].push_back(v[i].ind);
    dfs(1,0);
    for(int i=1;i<=N;++i)f>>x,s+=x*pas[i];
    g<<s;
    return 0;
}