记录编号 |
325729 |
评测结果 |
AAAAAAAAAA |
题目名称 |
不平凡的许愿树 |
最终得分 |
100 |
用户昵称 |
sxysxy |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.207 s |
提交时间 |
2016-10-20 10:53:11 |
内存使用 |
0.38 MiB |
显示代码纯文本
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <cstdarg>
- #include <string>
- #include <list>
- #include <algorithm>
- #include <queue>
- #include <vector>
- using namespace std;
- #define MAXN 5002
- vector<int> G[MAXN];
- int deep[MAXN];
- int parent[MAXN];
- int cnt[MAXN];
- int first[MAXN];
- /*
- void dfs(int u)
- {
- for(int i = 0; i < G[u].size(); i++)
- {
- int to = G[u][i];
- if(to != parent[u])
- {
- parent[to] = u;
- deep[to] = deep[u]+1;
- dfs(to);
- }
- }
- }
- */
- int tmp1[MAXN], tmp2[MAXN];
- int dfs(int u, int d)
- {
- cnt[d]++;
- int maxd = 1;
- for(int i = 0; i < G[u].size(); i++)
- {
- int to = G[u][i];
- if(to != parent[u])
- {
- parent[to] = u;
- maxd = max(maxd, dfs(to, d+1)+1);
- }
- }
- return maxd;
- }
- int main()
- {
- freopen("hopetree.in", "r", stdin);
- freopen("hopetree.out", "w", stdout);
- int n;
- scanf("%d", &n);
- for(int i = 1; i < n; i++)
- {
- int a, b;
- scanf("%d %d", &a, &b);
- G[a].push_back(b);
- G[b].push_back(a);
- }
- long long ans = 0;
- for(int i = 1; i <= n; i++)
- {
- for(int j = 0; j < G[i].size(); j++)
- {
- parent[G[i][j]] = i;
- int maxd = dfs(G[i][j], 1);
- for(int k = 1; k <= maxd; k++)
- {
- ans += tmp2[k]*cnt[k];
- tmp2[k] += tmp1[k]*cnt[k];
- tmp1[k] += cnt[k];
- cnt[k] = 0;
- }
- }
- for(int j = 1; j <= n; j++)
- tmp1[j] = tmp2[j] = 0;
-
- /*
- parent[i] = 0;
- memset(deep, 0, sizeof(deep));
- deep[i] = 1;
- dfs(i);
- sort(deep+1, deep+1+n);
-
- int maxd = 1;
- memset(cnt, 0, sizeof(cnt));
- for(int i = 1; i <= n; i++)
- {
- cnt[deep[i]]++;
- maxd = max(maxd, deep[i]);
- }
- for(int i = 1; i <= maxd; i++)
- {
- ans += cnt[i]*tmp2[i];
- tmp2[i] += tmp1[i]*cnt[i];
- tmp1[i] += cnt[i];
- }
- memset(tmp1, 0, sizeof(tmp1));
- memset(tmp2, 0, sizeof(tmp2));
- */
- }
- printf("%lld %lld", ans%338+1, (ans+233)%338+1);
- return 0;
- }