제출 #1266401

#제출 시각아이디문제언어결과실행 시간메모리
1266401lioowPaths (RMI21_paths)C++20
100 / 100
246 ms15960 KiB
#include <bits/stdc++.h> #define int long long #define pii pair<int,int> #define fi first #define se second using namespace std; const int maxn=100000; vector<pii>adj[maxn+2]; int dp[maxn+2],dp2[maxn+2]; multiset<int>sisa,utama; int n,k,jaw[maxn+2],ans=0; void ins(int x){ if(x==0) return; if((int)utama.size()<k) utama.insert(x),ans+=x; else { if(*utama.begin()<x){ sisa.insert(*utama.begin()); ans-=*utama.begin(); utama.erase(utama.begin()); utama.insert(x); ans+=x; } else { sisa.insert(x); } } } void del(int x){ if(x==0) return; if((int)utama.size()<k){ ans-=x; utama.erase(utama.find(x)); } else { if(*utama.begin()<=x){ ans-=x; utama.erase(utama.find(x)); if(sisa.empty()) return; ans+=*sisa.rbegin(); utama.insert(*sisa.rbegin()); sisa.erase(sisa.find(*sisa.rbegin())); } else { sisa.erase(sisa.find(x)); } } } void dfs(int x,int p){ dp[x]=0; dp2[x]=0; for(auto v:adj[x]){ if(v.fi==p) continue; dfs(v.fi,x); if(dp[x]<dp[v.fi]+v.se){ ins(dp[x]); dp2[x]=dp[x]; dp[x]=dp[v.fi]+v.se; } else { ins(dp[v.fi]+v.se); if(dp[v.fi]+v.se>dp2[x]) dp2[x]=dp[v.fi]+v.se; } } } void dfs2(int x,int p){ jaw[x]=ans; for(auto v:adj[x]){ if(v.fi==p) continue; int a=dp[x]; if(dp[v.fi]+v.se==dp[x]) a=dp2[x]; int b=dp[v.fi]; if(a+v.se>dp[v.fi]){ dp2[v.fi]=dp[v.fi]; dp[v.fi]=a+v.se; } else { dp2[v.fi]=max(dp2[v.fi],a+v.se); } del(b+v.se); ins(b); del(a); ins(a+v.se); dfs2(v.fi,x); ins(b+v.se); del(b); ins(a); del(a+v.se); } } signed main() { cin>>n>>k; for(int i=1;i<=n-1;i++){ int u,v,w;cin>>u>>v>>w; adj[u].push_back({v,w});adj[v].push_back({u,w}); } dfs(1,-1); ins(dp[1]); jaw[1]=ans; dfs2(1,-1); for(int i=1;i<=n;i++) cout<<jaw[i]<<endl; }
#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...