Skip to content

Commit bff784a

Browse files
authored
Create 834. Sum of Distances in Tree.cpp
1 parent 4300828 commit bff784a

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
int ans=0;
2+
class Solution {
3+
public:
4+
void dfs2(int i,vector<int> adj[],int parent[],int nodes[],int ans2,vector<int>& temp){
5+
int k = parent[i];
6+
if(k==-1){
7+
temp[i] = ans2;
8+
for(auto x:adj[i]){
9+
if(x!=parent[i]) dfs2(x,adj,parent,nodes,ans2,temp);
10+
}
11+
}
12+
else{
13+
int nodes_left = nodes[parent[i]]-nodes[i];
14+
ans2-=nodes[i];
15+
ans2+=nodes_left;
16+
temp[i] = ans2;
17+
nodes[i] = nodes[parent[i]];
18+
for(auto x:adj[i]){
19+
if(x!=parent[i]) dfs2(x,adj,parent,nodes,ans2,temp);
20+
}
21+
}
22+
}
23+
int dfs(int i,vector<int> adj[],int parent[],int nodes[],int level){
24+
ans+=level;nodes[i]=1;
25+
if(adj[i].size()==1 && parent[i]==adj[i][0]) return nodes[i];
26+
for(auto x:adj[i]){
27+
if(x!=parent[i]){
28+
parent[x]=i;
29+
nodes[i] += dfs(x,adj,parent,nodes,level+1);
30+
}
31+
}
32+
return nodes[i];
33+
}
34+
vector<int> sumOfDistancesInTree(int n, vector<vector<int>>& edges) {
35+
int i,j,k,m,ct=0;ans=0;
36+
m=edges.size();vector<int> temp(n,0);
37+
vector<int> adj[n];
38+
int parent[n], nodes[n];
39+
memset(nodes,0,sizeof(nodes));
40+
memset(nodes,-1,sizeof(parent));
41+
parent[0]=-1;
42+
for(i=0;i<m;i++){
43+
j = edges[i][0];
44+
k = edges[i][1];
45+
adj[j].push_back(k);
46+
adj[k].push_back(j);
47+
}
48+
int k1 = dfs(0,adj,parent,nodes,0);
49+
// cout<<ans<<endl;
50+
//for(i=0;i<n;i++) cout<<nodes[i]<<endl;
51+
dfs2(0,adj,parent,nodes,ans,temp);
52+
return temp;
53+
}
54+
};

0 commit comments

Comments
 (0)