【发布时间】:2021-09-04 21:27:28
【问题描述】:
问题是求树中两个节点之间的距离之和
输入:6 [[0,1],[0,2],[2,3],[2,4],[2,5]]
显示节点
输出:[8,12,6,10,10,10]
说明:树如上图。
我们可以看到 dist(0,1) + dist(0,2) + dist(0,3) + dist(0,4) + dist(0,5)
等于 1 + 1 + 2 + 2 + 2 = 8。
因此,answer[0] = 8,依此类推。
这是我的代码,我已经解决了,但这给出了 TLE 并且无法优化此解决方案
如何优化这个图形问题。
class Solution {
public:
vector<int> sumOfDistancesInTree(int n, vector<vector<int>>& edges) {
vector<int> g[n];
map<pair<int,int>,int> m;
for(auto i:edges){
g[i[0]].push_back(i[1]);
g[i[1]].push_back(i[0]);
}
for(int i=0;i<n;i++){
queue<int> q;
q.push(i);
vector<bool> vis(n,0);
vis[i]=1;
int incr=1;
while(!q.empty()){
int k=q.size();
while(k--){
int t=q.front();q.pop();
for(int j=0;j<g[t].size();j++){
if(!vis[g[t][j]] && g[t][j]!=i){
m[{i,g[t][j]}]+=incr;
q.push(g[t][j]);
vis[g[t][j]]=1;
}
}
}
incr++;
}
}
vector<int> res(n,0);
for(auto i:m){
res[i.first.first]+=i.second;
}
return res;
}
};
【问题讨论】:
标签: c++ caching graph dynamic-programming