Untitled
unknown
plain_text
22 days ago
2.0 kB
4
Indexable
class Solution { public: struct Node { int val,wt; }; pair<int,int> dfs(Node i, vector<vector<Node>> &tree, vector<int>& nums, unordered_set<int> &st, vector<int> &vis) { int n=tree[i.val].size(); if(vis[i.val]==1)return {0,0}; vis[i.val]=1; if(st.find(nums[i.val])!=st.end()){ vis[i.val]=0; return {0,0}; } if(n==0)return {i.wt,1}; st.insert(nums[i.val]); int maxLen=INT_MIN, minNode=INT_MAX; for(int j=0;j<tree[i.val].size();j++){ pair<int,int> x=dfs(tree[i.val][j],tree,nums,st,vis); if(x.first==maxLen&&x.second<minNode){ minNode=x.second; } else if(x.first>maxLen){ maxLen=x.first;; minNode=x.second; } } pair<int,int> ans={i.wt+maxLen,1+minNode}; st.erase(nums[i.val]); vis[i.val]=0; return ans; } vector<int> longestSpecialPath(vector<vector<int>>& edges, vector<int>& nums) { int n=nums.size(); vector<vector<Node>> tree(n); for(int i=0;i<edges.size();i++){ tree[edges[i][0]].push_back({edges[i][1],edges[i][2]}); tree[edges[i][1]].push_back({edges[i][0],edges[i][2]}); } vector<Node> leafs; for(int i=0;i<n;i++){ if(tree[i].size()==1)leafs.push_back({i,0}); } unordered_set<int> st; vector<int> vis(n,0); int maxLen=INT_MIN, minNode=INT_MAX; for(int i=0;i<leafs.size();i++){ pair<int,int> x=dfs(leafs[i],tree,nums,st,vis); if(x.first==maxLen&&x.second<minNode){ minNode=x.second; } else if(x.first>maxLen){ maxLen=x.first;; minNode=x.second; } } return {maxLen,minNode}; } };
Editor is loading...
Leave a Comment