Submission #1298940

#TimeUsernameProblemLanguageResultExecution timeMemory
1298940asli_bgPaths (RMI21_paths)C++20
36 / 100
632 ms936 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define FOR(i,a) for(int i=0;i<(a);i++) #define FORE(i,a,b) for(int i=(a);i<(b);i++) #define sp <<' '<< #define fi first #define se second #define pb push_back typedef vector<int> vi; typedef pair<int,int> pii; typedef vector<pii> vii; typedef vector<bool> vb; #define all(x) x.begin(),x.end() const int MAXN=2e3+5; const int INF=1e18; const int MOD=1e9+7; int n,k; vii adj[MAXN]; multiset<int> tut[MAXN]; int top[MAXN]; void merge(multiset<int>& a,multiset<int>& b,int nd,int kom){ if(a.size()<b.size()){ a.swap(b); swap(top[nd],top[kom]); } int sz=a.size(); for(auto el:b){ a.insert(el); top[nd]+=el; sz++; if(sz>k){ auto el2=*a.begin(); top[nd]-=el2; a.erase(a.find(el2)); sz--; } } } void dfs(int nd,int ata){ tut[nd].clear(); top[nd]=0; for(auto [kom,cost]:adj[nd]){ if(kom==ata) continue; dfs(kom,nd); int el=0; if(!tut[kom].empty()){ el=*tut[kom].rbegin(); tut[kom].erase(tut[kom].find(el)); top[kom]-=el; } tut[kom].insert(el+cost); top[kom]+=el+cost; merge(tut[nd],tut[kom],nd,kom); } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin>>n>>k; FOR(i,n-1){ int a,b,c; cin>>a>>b>>c; adj[a].pb({b,c}); adj[b].pb({a,c}); } FORE(i,1,n+1){ //solve for all roots dfs(i,-1); cout<<top[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...