记录编号 27526 评测结果 AAAAAAAAAA
题目名称 [USACO Nov10] 拜访奶牛 最终得分 100
用户昵称 Gravatardonny 是否通过 通过
代码语言 C++ 运行时间 0.064 s
提交时间 2011-09-26 19:28:30 内存使用 1.42 MiB
显示代码纯文本
#include <iostream>
#include <fstream>

using namespace std;

int i,j,k,l;
int f[50010][2],next[101000],a[101000];
int n,p,q;
int head,tail;

int Max(int x,int y)
{
	if (x>y)
		return x;
	return y;
}

void insert(int x,int y)
{
	if (next[x]==0)
	{
		if (a[x]==0)
			a[x]=y;
		else
		{
			tail++;
			a[tail]=y;
			next[x]=tail;
		}
	}
	else
	{
		tail++;
		a[tail]=y;
		next[tail]=next[x];
		next[x]=tail;
	}
	
	if (next[y]==0)
	{
		if (a[y]==0)
			a[y]=x;
		else
		{
			tail++;
			a[tail]=x;
			next[y]=tail;
		}
	}
	else
	{
		tail++;
		a[tail]=x;
		next[tail]=next[y];
		next[y]=tail;
	}
}

void dfs(int x,int y)
{
	int i,j,k,l;
	i=a[x];
	j=next[x];
	k=1;
	l=0;
	
	while (i!=0)
	{
		if ((f[i][0]==-1)and(i!=y))
			dfs(i,x);
		if (i!=y)
		{
			k+=f[i][0];
			l+=Max(f[i][1],f[i][0]);
		}
		i=a[j];
		j=next[j];
	}
	f[x][0]=l;
	f[x][1]=k;
}

int main()
{
	ifstream fin("vacation.in");
	ofstream fout("vacation.out");
	
	fin>>n;
	
	tail=n;
	for (i=1;i<n;i++)
	{
		fin>>j>>k;
		insert(j,k);
	}
	
	for (i=1;i<=n;i++)
	{
		f[i][0]=-1;
		f[i][1]=-1;
	}
	
	dfs(1,0);
	
	if (f[1][1]>f[1][0])
		f[1][0]=f[1][1];
	
	fout<<f[1][0]<<endl;
	
	fin.close();
	fout.close();
	
	return 0;
}