比赛 不平凡的世界 评测结果 AAAAAAAAAA
题目名称 不平凡的许愿树 最终得分 100
用户昵称 老爹 运行时间 0.755 s
代码语言 C++ 内存使用 0.62 MiB
提交时间 2017-09-05 19:46:02
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=5010;
int n,cnt;
long long ans;
int to[maxn<<1],next[maxn<<1],head[maxn],dep[maxn];
long long s[maxn],f[4][maxn];
void add(int a,int b)
{
	to[cnt]=b,next[cnt]=head[a],head[a]=cnt++;
}
void dfs(int x,int fa)
{
	int i;
	s[dep[x]]++;
	for(i=head[x];i!=-1;i=next[i])
	{
		if(to[i]==fa)	continue;
		dep[to[i]]=dep[x]+1,dfs(to[i],x);
	}
}
int main()
{
	freopen("hopetree.in","r",stdin);
	freopen("hopetree.out","w",stdout);
	scanf("%d",&n);
	int i,j,k,l,a,b;
	memset(head,-1,sizeof(head));
	for(i=1;i<n;i++)
	{
		scanf("%d%d",&a,&b);
		add(a,b),add(b,a);
	}
	for(i=1;i<=n;i++)
	{
		memset(f,0,sizeof(f));
		for(k=1;k<=n;k++)	f[0][k]=1;
		for(j=head[i];j!=-1;j=next[j])
		{
			memset(s,0,sizeof(s));
			dep[to[j]]=1,dfs(to[j],i);
			for(l=3;l>=1;l--)
				for(k=1;s[k];k++)
					f[l][k]+=f[l-1][k]*s[k];
		}
		for(k=1;f[3][k];k++)	ans+=f[3][k];
	}
	printf("%lld %lld",ans%338+1,(ans+233)%338+1);
	return 0;
}