牛客小白月赛23
https://ac.nowcoder.com/acm/problem/204440
树上求和
/ 参考别人的代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxx=1e5+5;
vector<int>q[maxx];
int mum[maxx],k,n;
ll edge[maxx];
void dfs(int x,int last){
mum[x]=1;
for(int i=0;i<q[x].size() ;i++){
int v=q[x][i];
if(v!=last){
dfs(v,x);
mum[x]+=mum[v];
edge[k++]=1ll*mum[v]*(n-mum[v]);
}
}
}
int main(){
cin>>n;
for(int i=1;i<n;i++){
int x,y;cin>>x>>y;
q[x].push_back(y);
q[y].push_back(x);
}
dfs(1,-1);
sort(edge,edge+k);
ll sum=0;
for(int i=0;i<k;i++)
sum+=(--n)*edge[i];
cout<<sum;
return 0;
}