Submission #1167560

#TimeUsernameProblemLanguageResultExecution timeMemory
1167560WarinchaiParkovi (COCI22_parkovi)C++20
0 / 110
614 ms23316 KiB
#include<bits/stdc++.h> #define int long long using namespace std; vector<pair<int,int>>adj[200006]; int w[200006]; int vis[200005]; int sum[200005]; int dp[200005]; int back[200005]; int place[200005]; int n,k; vector<int>ans; int check(int m){ for(int i=1;i<=n;i++)dp[i]=0; for(int i=1;i<=n;i++){ int st=1,en=i,ans=0; while(st<=en){ int md=(st+en)/2; //cerr<<st<<" "<<en<<" "<<md<<"\n"; if(sum[i-1]-sum[md-1]<=m){ ans=md; en=md-1; }else{ st=md+1; } } //cerr<<"ans1:"<<ans<<"\n"; int ans2=0; st=1,en=ans; while(st<=en){ int md=(st+en)/2; if(sum[ans-1]-sum[md-1]<=m){ ans2=md; en=md-1; }else{ st=md+1; } } back[i]=ans2-1; place[i]=ans; if(ans2==1)dp[i]=0; else dp[i]=dp[ans2-1]+1; //cerr<<"i:"<<i<<" "<<ans2<<"\n"; } //cerr<<m<<" "<<dp[n]<<"\n"; if(dp[n]>k){ return false; }else{ return true; } } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>k; for(int i=1;i<n;i++){ int a,b,c;cin>>a>>b>>c; adj[a].push_back({b,c}); adj[b].push_back({a,c}); w[a]=c; sum[i]=sum[i-1]+w[i]; } int st=0,en=2e15; int opt=0; //cerr<<"work\n"; while(st<=en){ int m=(st+en)/2; if(check(m)){ en=m-1; opt=m; }else{ st=m+1; } } cout<<opt<<"\n"; check(opt); int cur=n; vector<int>v; while(cur!=0){ //cerr<<cur<<"\n"; v.push_back(place[cur]); cur=back[cur]; } for(auto x:v)cout<<x<<" ",vis[x]++; int left=k-v.size(); int cnt=v.size(); if(cnt==k)return 0; for(int i=1;i<=n;i++){ if(!vis[i])cout<<i<<" ",cnt++; if(cnt==k)return 0; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...