Cod sursa(job #154249)

Utilizator raducu87Radu Andritoiu raducu87 Data 11 martie 2008 01:33:32
Problema Dosare Scor 70
Compilator c Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <stdio.h>
#include <string.h>


int main()
{
    FILE *f, *g;
    int i, j, n, nr, x, val, k;
    long v[16000], p[16000], ac[16000];
    
    f=fopen("dosare.in", "r");
    fscanf(f, "%d", &n);
    p[1]=0;
    for (i=2; i<=n; i++)
        fscanf(f, "%ld", &p[i]);
    for (i=1; i<=n; i++)
    {
        fscanf(f, "%ld", &v[i]);
        ac[i]=v[i];
    }
    fclose(f);
    
    for (i=2; i<=n; i++)
        if (v[i]!=0)
        {
                    val=v[i];
                    x=p[i];
                    while (x!=0)
                    {
                          ac[x]+=val;
                          x=p[x];
                    }
        }    
        
    val=ac[1];
    for (i=2; i<=n; i++)
        if (ac[i]!=0)
        {
                     x=p[i];
                     nr=1;
                     v[nr]=ac[i];
                     for (j=i+1; j<=n; j++)
                         if (p[j]==x && ac[j]!=0) 
                         {
                                      nr++;
                                      v[nr]=ac[j];
                                      ac[j]=0;
                         }
                     for (j=1; j<nr; j++)
                         for (k=j+1; k<=nr; k++)
                             if (v[j]<v[k]) 
                             {
                                            x=v[j];
                                            v[j]=v[k];
                                            v[k]=x;
                             }
                     for (j=1; j<=nr; j++)
                         val=val+j*v[j];
        }
    
    g=fopen("dosare.out", "w");
    fprintf(g, "%ld", val);
    fclose(g);
    return 0;
}