Submission #536627

#TimeUsernameProblemLanguageResultExecution timeMemory
536627errorgornPaths (RMI21_paths)C++17
100 / 100
377 ms27624 KiB
// Super Idol的笑容 // 都没你的甜 // 八月正午的阳光 // 都没你耀眼 // 热爱105°C的你 // 滴滴清纯的蒸馏水 #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/rope> using namespace std; using namespace __gnu_pbds; using namespace __gnu_cxx; #define int long long #define ll long long #define ii pair<ll,ll> #define iii pair<ii,ll> #define fi first #define se second #define endl '\n' #define debug(x) cout << #x << ": " << x << endl #define pub push_back #define pob pop_back #define puf push_front #define pof pop_front #define lb lower_bound #define ub upper_bound #define rep(x,start,end) for(auto x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--)) #define all(x) (x).begin(),(x).end() #define sz(x) (int)(x).size() #define indexed_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> //change less to less_equal for non distinct pbds, but erase will bug mt19937 rng(chrono::system_clock::now().time_since_epoch().count()); int n,k; struct node{ multiset<int> hi; multiset<int,greater<int> > lo; int sum=0; void add(int i){ hi.insert(i); sum+=i; if (sz(hi)>k){ sum-=*hi.begin(); lo.insert(*hi.begin()); hi.erase(hi.begin()); } } void rem(int i){ if (lo.find(i)!=lo.end()) lo.erase(lo.find(i)); else{ sum-=i; hi.erase(hi.find(i)); if (!lo.empty()){ sum+=*lo.begin(); hi.insert(*lo.begin()); lo.erase(lo.begin()); } } } } root; vector<ii> al[100005]; vector<int> child[100005]; int dfs(int i,int p){ child[i]={0}; for (auto [it,w]:al[i]){ if (it==p) continue; child[i].pub(dfs(it,i)+w); } sort(all(child[i])); reverse(all(child[i])); rep(x,1,sz(child[i])) root.add(child[i][x]); return child[i][0]; } int ans[100005]; void dfs2(int i,int p,int curr){ ans[i]=root.sum; child[i].pub(curr); sort(all(child[i])); reverse(all(child[i])); for (auto [it,w]:al[i]){ if (it==p) continue; int a,b; if (child[it][0]+w==child[i][0]) a=child[i][1]; else a=child[i][0]; b=child[it][0]; root.add(a+w); root.rem(a); root.add(b); root.rem(b+w); dfs2(it,i,a+w); root.rem(a+w); root.add(a); root.rem(b); root.add(b+w); } } signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin.exceptions(ios::badbit | ios::failbit); cin>>n>>k; int a,b,c; rep(x,1,n){ cin>>a>>b>>c; al[a].pub({b,c}); al[b].pub({a,c}); } root.add(dfs(1,-1)); dfs2(1,-1,0); rep(x,1,n+1) cout<<ans[x]<<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...