记录编号 56503 评测结果 AAAAAAAAAA
题目名称 立春树 最终得分 100
用户昵称 GravatarQhelDIV 是否通过 通过
代码语言 C++ 运行时间 0.161 s
提交时间 2013-03-31 10:00:43 内存使用 11.67 MiB
显示代码纯文本
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream fin("tdec.in");
ofstream fout("tdec.out");
typedef long long ll;
const long long Inf=123456789;
const ll Nx=200000;
class Node
{
public:
	ll Name;
	Node *Prev;
}*last[Nx];
ll Vn,C[Nx],T[Nx],f[Nx],t[Nx],m[Nx];//f是总耗时,t是总数量
void Add(ll u,ll v)
{
Node *temp=new Node;
	temp->Name=v;
	temp->Prev=last[u];
	last[u]=temp;
}
void Initialize()
{
ll p;
	fin>>Vn;
	for(ll i=1;i<=Vn;i++)
	{
		fin>>p>>C[i]>>T[i];
		if(p>0)
			Add(p,i);
	}
}
void dfs(ll pos)
{
Node *p;
	m[pos]=Inf;
	for(p=last[pos];p;p=p->Prev)
	{
		dfs(p->Name);
		t[pos]+=t[p->Name];
		f[pos]+=f[p->Name];
		m[pos]=min(m[pos],m[p->Name]);
	}
	m[pos]=min(m[pos],T[pos]);
	if(t[pos]<C[pos])
		f[pos]+=(C[pos]-t[pos])*m[pos];
	t[pos]=max(C[pos],t[pos]);
}
int main()
{
	Initialize();
	
	dfs(1);
	
	fout<<f[1]<<endl;
	
	fin.close();
	fout.close();
	return 0;
}