Submission #1213595

#TimeUsernameProblemLanguageResultExecution timeMemory
1213595Muhammad_AneeqPaths (RMI21_paths)C++20
36 / 100
1114 ms546692 KiB
#include <iostream> #include <algorithm> #include <vector> #include <set> using namespace std; int const N=1e5+10; vector<pair<int,int>>nei[N]; multiset<long long>*vl[N]={}; long long dist[N]={}; int lv=0; void dfs(int u,int p=0) { bool w=1; for (auto [i,c]:nei[u]) { if (i==p) continue; w=0; dist[i]=dist[u]+c; dfs(i,u); } vl[u]=new multiset<long long>(); if (w) (*vl[u]).insert(dist[u]-dist[p]); else { int v=-1,sz=0; for (auto [i,c]:nei[u]) { if (i==p) continue; if ((*vl[i]).size()>sz) { sz=(*vl[i]).size(); v=i; } } vl[u]=vl[v]; for (auto [i,c]:nei[u]) { if (i==v||i==p) continue; for (auto j:(*vl[i])) (*vl[u]).insert(j); } long long z=*rbegin(*vl[u]); (*vl[u]).erase((*vl[u]).find(z)); z+=dist[u]-dist[p]; (*vl[u]).insert(z); } } inline void solve() { int n,k; cin>>n>>k; for (int i=1;i<n;i++) { int u,v,c; cin>>u>>v>>c; nei[u].push_back({v,c}); nei[v].push_back({u,c}); } for (int i=1;i<=n;i++) { dist[i]=0; dfs(i); int z=min(int((*vl[i]).size()),k); long long ans=0; while (z--) { long long f=*rbegin(*vl[i]); (*vl[i]).erase((*vl[i]).find(f)); ans+=f; } cout<<ans<<endl; } } int main() { ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int t=1; for (int i=1;i<=t;i++) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...