比赛 |
2011.3.17 |
评测结果 |
AAAAAAAAAA |
题目名称 |
立春树 |
最终得分 |
100 |
用户昵称 |
Pom |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-03-17 09:40:57 |
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int MAXN=111111;
long long n,m,i,j,k,c[MAXN],h,t,s,sum[MAXN],need[MAXN],ans;
int f[MAXN],inn[MAXN],Q[MAXN];
int main()
{
freopen("tdec.in","r",stdin);
freopen("tdec.out","w",stdout);
scanf("%d",&n);
memset(inn,0,sizeof(inn));
for (i=1;i<=n;i++)
{
//cin>>f[i]>>need[i]>>c[i];
scanf("%d%d%d",&f[i],&need[i],&c[i]);
if (f[i]!=-1) ++inn[f[i]];
}
t=0;
h=1;
for (i=1;i<=n;i++)
if (inn[i]==0)
{
Q[++t]=i;
++s;
}
for (;;)
{
k=Q[h];
if (sum[k]<need[k])
{
ans+=(need[k]-sum[k])*c[k];
sum[k]=need[k];
}
if (k==1) break;
sum[f[k]]+=sum[k];
if (c[k]<c[f[k]]) c[f[k]]=c[k];
--inn[f[k]];
if (inn[f[k]]==0)
{
Q[++t]=f[k];
}
++h;
}
cout<<ans<<endl;
return 0;
}