Cod sursa(job #154248)
Utilizator | Data | 11 martie 2008 01:31:36 | |
---|---|---|---|
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, "%d", &p[i]);
for (i=1; i<=n; i++)
{
fscanf(f, "%d", &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, "%d", val);
fclose(g);
return 0;
}