
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 1e5 + 5;
struct node{
int t,nex;
};
node a[maxn<<1];
int head[maxn],tot,cnt[maxn];
void add(int x,int y){
a[++tot].t = y,a[tot].nex = head[x],head[x] = tot;
}
void dfs(int x,int fa,int len)
{
cnt[x] = len;
for(int i=head[x]; i ; i=a[i].nex){
if(a[i].t != fa)
dfs(a[i].t , x , len + 1);
}
}
int main()
{
int n,x,y,cnt1 = 0 ,cnt2 = 0;
cin>>n;
for(int i=1;i<n;i++)
cin>>x>>y,add(x,y),add(y,x);
dfs(1 , 0 , 0);
for(int i=1;i<=n;i++){
if(cnt[i]%2)cnt1++;
else cnt2++;
}
cout<<(1ll*cnt1*(cnt1 - 1)/2) + (1ll*cnt2*(cnt2 - 1)/2)<<endl;
return 0;
}
原文:https://www.cnblogs.com/QFNU-ACM/p/12703226.html