Cod sursa(job #2089161)

Utilizator andreiutu111Noroc Andrei Mihail andreiutu111 Data 16 decembrie 2017 11:16:37
Problema Dosare Scor 0
Compilator cpp Status done
Runda info_test_2 Marime 0.86 kb
#include<bits/stdc++.h>
using namespace std;
struct file{
    int val,ind,nr=0;
}v[16001];
int N,M,x,y,s;
bool n[16001];
vector <int> G[16001];
void dfs(int nod,int nr){
    n[nod]=1,++nr,s+=v[nod].val*nr;
    for(int i=0;i<G[nod].size();++i)
        if(!n[G[nod][i]])
            dfs(G[nod][i],nr),++nr;
}
bool cmp(file X,file Y){
    if(X.nr<Y.nr)return false;
    return true;
}
int main()
{
    freopen("dosare.in","r",stdin);
    freopen("dosare.out","w",stdout);
    scanf("%d",&N);
    v[1].val=1,v[1].ind=1;
    for(int i=2;i<=N;++i)scanf("%d",&x),v[i].val=x,++v[x].nr,v[i].ind=i;
    sort(v+1,v+N+1,cmp);
    for(int i=1;i<=N;++i)
        if(v[i].ind!=v[i].val)
            G[v[i].ind].push_back(v[i].val),G[v[i].val].push_back(v[i].ind);
    for(int i=1;i<=N;++i)scanf("%d",&v[i].val);
    dfs(1,0);
    printf("%d",s);
    return 0;
}