题目:统计一棵树上长度为奇数的路径的条数。
分析:对树上的顶点进行黑白染色,奇数路径端点必然是一黑一白,答案就是黑色顶点的数量与白色顶点的数量的乘积。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e5+10;
int v[N],n;
vector<int> e[N];
ll x,y;
void dfs(int u,int d) {
v[u]=1;
if(d%2) x++;
else y++;
for(int i=0;i<e[u].size();i++) {
int tp=e[u][i];
if(!v[tp]) {
dfs(tp,d+1);
}
}
}
int main() {
cin>>n;
for(int i=1;i<n;i++) {
int a,b;
cin>>a>>b;
e[a].push_back(b);
e[b].push_back(a);
}
dfs(1,1);
cout<<x*y<<endl;
return 0;
}