这是一个简单的dfs
偶数=偶数+偶数或者奇数+奇数 所有我们只用统计深度为奇数或者偶数的个数
答案为 奇数或者偶数任取两个 即(ans1(ans1-1)/2)+(ans2(ans2-1)/2)
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
int head[N],nex[N<<1],to[N<<1],tot;
int n,h[N];
ll ans1,ans2;
void add(int a,int b){
to[++tot]=b; nex[tot]=head[a]; head[a]=tot;
}
void dfs(int x,int fa){
h[x]=h[fa]+1;
if(h[x]&1) ans1++;
else ans2++;
for(int i=head[x];i;i=nex[i]){
if(to[i]!=fa) dfs(to[i],x);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++){
int x,y; scanf("%d %d",&x,&y); add(x,y); add(y,x);
}
dfs(1,0);
cout<<(ans1*(ans1-1)/2)+(ans2*(ans2-1)/2)<<endl;
return 0;
}

京公网安备 11010502036488号