#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#pragma comment(linker, "/STACK:16777216")
#define LL long long
using namespace std;
const int MAXN = 100000 + 10;
int val[MAXN];
vector<int>G[MAXN];
int n;
LL ans;
void dfs(int u, int pre)
{
val[u] = 1;
int tmp = 0, sz = G[u].size();
for(int i=0;i<sz;i++)
{
int v = G[u][i];
if(v == pre) continue;
dfs(v, u);
ans += (long long)(tmp * val[v]);
val[u] += val[v];
tmp += val[v];
}
ans += (long long)tmp * (n - val[u]);
}
int main()
{
while(scanf("%d", &n)!=EOF)
{
for(int i=0;i<=n;i++) G[i].clear();
int u, v;
for(int i=1;i<n;i++)
{
scanf("%d%d", &u, &v);
G[u].push_back(v);
G[v].push_back(u);
}
ans = 0;
dfs(1, -1);
LL tot = (long long)n * (n-1) *(n - 2) / 6;
printf("%I64d\n", tot - ans);
}
return 0;
}
HDU 4705 Y(树型DP)
最新推荐文章于 2020-08-30 15:31:31 发布