题上要求找长度为偶数的路径。根据常识可知 偶 = 偶 + 偶 = 奇 + 奇。
所以我们可以考虑深度,算出每个节点的深度,深度为偶数的和偶数组合,深度奇数的和奇数组合。
因为x到y和y到x属于一条路,不考虑顺序,所以答案是个组合数。
也是就
其中a、b分别为深度为奇、偶数的节点个数
注意结果炸int
#include<bits/stdc++.h>
using namespace std;
vector<int>e[1<<17];
long long a,b;
void dfs(int x,int f,int dep){
if(dep&1) a++;
else b++;
for(auto it:e[x]){
if(it==f) continue;
dfs(it,x,dep+1);
}
}
int main(){
int n;cin>>n;
for(int i=1;i<n;i++){
int x,y;cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
dfs(1,0,0);
cout<<a*(a-1)/2+b*(b-1)/2;
return 0;
}
京公网安备 11010502036488号