记录编号 | 205714 | 评测结果 | AAAAAAAAAA | ||
---|---|---|---|---|---|
题目名称 | 不平凡的许愿树 | 最终得分 | 100 | ||
用户昵称 | 是否通过 | 通过 | |||
代码语言 | C++ | 运行时间 | 4.370 s | ||
提交时间 | 2015-11-05 17:39:56 | 内存使用 | 2.91 MiB | ||
#include<cstdio> #include<deque> #include<cstring> #include<iostream> using namespace std; const int SIZEN=5010,MOD=338; typedef long long LL; deque<int> s[SIZEN]; int N; int dep[SIZEN];//深度为x的点的数量 int H1[SIZEN]={0},H2[SIZEN]; void read() { //cout<<N<<endl; scanf("%d",&N); int fr,to; for(int i=1;i<N;i++) { scanf("%d%d",&fr,&to); //cout<<fr<<" "<<to<<endl; s[fr].push_back(to); s[to].push_back(fr); } } int dfs(int x,int fa,int d) { dep[d]++; int tem=1; for(int i=0;i<s[x].size();i++) { int v=s[x][i]; if(v==fa) continue; tem=max(tem,dfs(v,x,d+1)+1); } return tem; } void work() { int ans=0; for(int i=1;i<=N;i++) { memset(H1,0,sizeof(H1)); memset(H2,0,sizeof(H2)); for(int j=0;j<s[i].size();j++) { memset(dep,0,sizeof(dep)); int v=s[i][j]; int d=dfs(v,i,1); for(int k=1;k<=d;k++) { ans+=dep[k]*H1[k]; H1[k]+=H2[k]*dep[k]; H2[k]+=dep[k]; ans%=MOD; } } } printf("%d %d\n",ans+1,(ans+233)%MOD+1); } int main() { freopen("hopetree.in","r",stdin); freopen("hopetree.out","w",stdout); read(); work(); return 0; }