记录编号 134114 评测结果 AAAAAAAAAA
题目名称 最长链 最终得分 100
用户昵称 Gravatar乌龙猹 是否通过 通过
代码语言 C++ 运行时间 0.021 s
提交时间 2014-10-29 14:46:38 内存使用 0.66 MiB
显示代码纯文本
#include<cstdio>
#include<cctype>
using namespace std;

int ret;
char ch;
int qin()
{
	ret=0;
	while(ch=getchar(),!isdigit(ch));
	while(ret=ret*10+ch-'0',ch=getchar(),isdigit(ch));
	return ret;
}

struct dx{
	int to,next;
	int data;
};
dx jb[20001];
int sum;
int last[10001];

void insert(int From,int To,int p)
{
	sum++;
	jb[sum].to=To;
	jb[sum].next=last[From];
	last[From]=sum;
	jb[sum].data=p;
}

int n;
int f[20001];
bool flag[20001];

int dfs(int x,int y)
{
	int son=0;
	int k=last[x];
    while(k)
	{
		int p=jb[k].to;
		if(p!=y)
		{
			if(!flag[k])
			{
				f[k]=dfs(p,x)+jb[k].data;
				flag[k]=1;
			}
			if(f[k]>son) son=f[k];
		}
		k=jb[k].next;
	}
	return son;
}

int main()
{
    freopen("length.in","r",stdin);
	freopen("length.out","w",stdout);
	n=qin();
	for(int i=2;i<=n;i++)
	{
		int x,y;
		x=qin();y=qin();
		insert(i,x,y);
		insert(x,i,y);
	}
	for(int i=1;i<=n;i++)
	{
		int maxx=0;
		int k=last[i];
		while(k)
		{
			int p=jb[k].to;
			if(!flag[k])
			{
				f[k]=dfs(p,i)+jb[k].data;
				flag[k]=1;
			}
			if(f[k]>maxx) maxx=f[k];
			k=jb[k].next;
		}
		printf("%d\n",maxx);
	}
	//while(1);
	return 0;
}