Submission #791270

#TimeUsernameProblemLanguageResultExecution timeMemory
791270Username4132Parkovi (COCI22_parkovi)C++14
110 / 110
561 ms32192 KiB
#include<iostream>
#include<vector>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using plb = pair<ll, bool>;
#define forn(i, n) for(int i=0; i<(int)n; ++i)
#define PB push_back
#define F first
#define S second

const ll INF = 200000000000010;
const int MAXN = 200010;
int n, k;
bool pres[MAXN];
vector<int> ans;
ll target;
vector<pii> g[MAXN];

plb dfs(int v, int p, ll cost){
    ll mxD=0, mxS=-1;
    for(pii to:g[v]) if(to.F!=p){
        plb res = dfs(to.F, v, to.S);
        if(res.S) mxS = max(mxS, res.F - to.S);
        else mxD = max(mxD, res.F + to.S);
    }
    if(mxD <= mxS) return {mxS, true};
    else if(mxD + cost > target){
        ans.PB(v);
        return {target, true};
    }
    else return {mxD, false};
}


int main(){
    scanf("%d %d", &n, &k);
    forn(i, n-1){
        int a, b, c; scanf("%d %d %d", &a, &b, &c); --a, --b;
        g[a].PB({b, c}), g[b].PB({a, c});
    }
    ll lo=-1, hi=INF;
    while(hi-lo>1){
        ll mid = (hi+lo)/2;
        ans.clear(), target=mid;
        dfs(0, 0, 2*INF);
        if((int)ans.size()<=k) hi=mid;
        else lo=mid;
    }
    ans.clear();
    target=hi;
    dfs(0, 0, 2*INF);
    for(int el:ans) pres[el]=true;
    forn(i, n) if(!pres[i] && (int)ans.size()<k) ans.PB(i), pres[i]=true;
    printf("%lld\n", hi);
    forn(i, n) if(pres[i]) printf("%d ", i+1);
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:37:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |     scanf("%d %d", &n, &k);
      |     ~~~~~^~~~~~~~~~~~~~~~~
Main.cpp:39:27: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   39 |         int a, b, c; scanf("%d %d %d", &a, &b, &c); --a, --b;
      |                      ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...