1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include<bits/stdc++.h> using namespace std; #define int long long signed main(){ int n; cin>>n; vector<int> v(n+1,0); vector<vector<int>> g(n+1,vector<int>()); for(int i=1;i<n;i++){ int x,y; cin>>x>>y; g[x].push_back(y); g[y].push_back(x); } auto dfs1 = [&](auto&&self,int fa,int node)->void{ if(g[node].size()==1&&fa!=-1){ v[node]=0; return ; } for(auto son:g[node]){ if(son==fa)continue; self(self,node,son); v[node]+=abs(node-son)+v[son]; } }; int ans=9e18; auto dfs2 = [&](auto&&self,int fa,int node)->void{ if(g[node].size()==1&&fa!=-1){ return ; } for(auto son:g[node]){ if(son==fa)continue; int d1=v[son]; int d2=v[1]-v[son]-abs(son-node); ans=min(ans,abs(d1-d2)); self(self,node,son); } }; dfs1(dfs1,-1,1); dfs2(dfs2,-1,1); cout<<ans; }
|