Submission #1159170

#TimeUsernameProblemLanguageResultExecution timeMemory
1159170keremParkovi (COCI22_parkovi)C++20
110 / 110
491 ms35128 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fr first #define sc second #define pb push_back #define endl "\n" #define all(x) x.begin(),x.end() #define sp << " " << #define inf 1e15 #define N 200000 #define fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);cout<<fixed<<setprecision(0) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); typedef tuple<int,int,int> tiii; typedef pair<int,int> pii; int n,k; vector<int> ans; vector<pii> v[N+5]; pii dfs(int x,int ata,int dist){ pii t={inf,0}; int pw=0; for(auto [i,w]:v[x]){ if(i==ata){ pw=w; continue; } pii p=dfs(i,x,dist); t.fr=min(t.fr,p.fr+w); t.sc=max(t.sc,p.sc+w); } if(t.sc+t.fr<=dist) t.sc=-pw; if(t.sc+pw>dist){ ans.pb(x); t={0,-pw}; } return t; } void solve(){ cin >> n >> k; for(int i=1;i<n;i++){ int x,y,z; cin >> x >> y >> z; v[x].pb({y,z}); v[y].pb({x,z}); } int l=0,r=inf; while(l<r){ int mid=(l+r)/2; ans.clear(); pii p=dfs(1,0,mid); if(p.fr+p.sc>mid) ans.pb(1); //~ cout << l sp mid sp r sp ans.size() << endl; if((int)ans.size()>k) l=mid+1; else r=mid; } cout << l << endl; ans.clear(); pii p=dfs(1,0,l); if(p.fr+p.sc>l) ans.pb(1); sort(all(ans)); int j=0; for(int i=1;i<=n && (int)ans.size()<k;i++){ if(i==ans[j]) j++; else ans.pb(i); } for(auto i:ans) cout << i << " "; } int32_t main(){ //~ freopen("cbarn.in","r",stdin); //~ freopen("cbarn.out","w",stdout); fast; int test=1; //~ cin >> test; while(test--) 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...