Cod sursa(job #2211796)

Utilizator roberttrutaTruta Robert roberttruta Data 11 iunie 2018 21:25:45
Problema Dosare Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
struct vct
{
    int x;
    long long y;
}val[16002]; ///x=parintele; y=de cate ori se trece pe acolo
vector <int> v[16002];
long long n,a,j,nr;
void dfs(int start)
{
    int i;
    for(i=0;i<v[start].size();i++)
    {
        dfs(v[start][i]);
    }
    val[val[start].x].y+=val[start].y;
}
bool cmp (int A , int B)
{
    return val[A].y>val[B].y;
}
int main()
{
    ifstream f("dosare.in");
    ofstream g("dosare.out");
int i;
    f>>n;
    for(i=2;i<=n;i++)
    {
        f>>a;
       v[a].push_back(i);
       val[i].x=a;
    }
    for(i=1;i<=n;i++)
    {
        f>>a;
        val[i].y=a;
    }
    dfs(1);

for(i=1;i<=n;i++)
    sort(v[i].begin(),v[i].end(),cmp);

for(i=1;i<=n;i++)
    for(j=0;j<v[i].size();j++)
        nr=nr+val[v[i][j]].y*(j+1);
    g<<nr+val[1].y;
    return 0;
}