Cod sursa(job #991514)

Utilizator misinozzz zzz misino Data 30 august 2013 17:01:48
Problema Dosare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
int i,n,x;
vector<int>v[16010];
long long a[16010],sol;
inline bool cmp(int x,int y)
{
    return a[x]>a[y];
}
inline void dfs1(int x)
{
    for(vector<int>::iterator it=v[x].begin();it!=v[x].end();++it)
    {
        dfs1(*it);
        a[x]+=a[*it];
    }
    sort(v[x].begin(),v[x].end(),cmp);
}
inline void dfs2(int x)
{
    long long nr=1;
    for(vector<int>::iterator it=v[x].begin();it!=v[x].end();++it)
    {
        sol+=nr*a[*it];
        ++nr;
        dfs2(*it);
    }
}
int main()
{
    f>>n;
    for(i=2;i<=n;++i)
    {
        f>>x;
        v[x].push_back(i);
    }
    for(i=1;i<=n;++i)
    f>>a[i];
    dfs1(1);
    sol=a[1];
    dfs2(1);
    g<<sol<<'\n';
    return 0;
}