比赛 2011.3.17 评测结果 AAAAAAAAAA
题目名称 立春树 最终得分 100
用户昵称 .Xmz 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-03-17 09:57:18
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cstdio>

using namespace std;
struct edge
{
	int t;
	edge *next;
}E[200001],*V[100001];
int eh,n;
long long C[100001],T[100001];
long long cost[100001];
inline void addedge(int a,int b)
{
	E[++eh].next=V[a];  V[a]=E+eh;  V[a]->t=b;
}

void init()
{
	scanf("%d",&n);
	int t;
	for (int i=1;i<=n;i++)
	{
		scanf("%d%lld%lld",&t,C+i,T+i);
		if (i!=1) addedge(t,i);
	}
	
}

void dp(int u)
{
	long long sum=0;
	for (edge *e=V[u];e;e=e->next)
	{
		dp(e->t);
		sum+=C[e->t];
		cost[u]+=cost[e->t];
		if (T[e->t]<T[u]) T[u]=T[e->t];
	}
	if (sum<C[u]) cost[u]+=T[u]*(C[u]-sum);
	else C[u]=sum;
}

int main()
{
	freopen("tdec.in","r",stdin);
	freopen("tdec.out","w",stdout);
	init();
	dp(1);
	printf("%lld\n",cost[1]);
	return 0;
}