Cod sursa(job #2089245)

Utilizator RazvanGutaGuta Razvan Alexandru RazvanGuta Data 16 decembrie 2017 11:54:30
Problema Dosare Scor 0
Compilator cpp Status done
Runda info_test_2 Marime 0.86 kb
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
ifstream f("dosare.in");
ofstream g("dosare.out");
int n,i,x,d[16000],dos[16000];
vector<int> G[16000],C;
void losen(int nod)
{
    for(int i=0;i<G[nod].size();i++)
    {
        int x1=G[nod][i];
        // g<<nod<<" "<<x1<<endl;
        losen(x1);
       // g<<nod<<" "<<x1<<endl;
        d[nod]+=d[x1];
        C.push_back(dos[x1]);
        dos[nod]+=dos[x1];
    }
    sort(C.begin(),C.end());
    for(int i=G[nod].size()-1;i>=0;i--)
        {
            d[nod]+=C[i]*(G[nod].size()-i-1);
        }
    d[nod]+=dos[nod];
}
int main()
{
    f>>n;
    for(i=2;i<=n;i++)
    {
        f>>x;
        G[x].push_back(i);
    }
    for(i=1;i<=n;i++)
        f>>dos[i];
    losen(1);
    /*for(i=1;i<=n;i++)
        g<<d[i]<<" ";*/
    g<<d[1];
    return 0;
}