Submission #547944

#TimeUsernameProblemLanguageResultExecution timeMemory
547944ZuZKhoRace (IOI11_race)C++17
Compilation error
0 ms0 KiB
#include<bits/stdc++.h>
#include "race.h"

using namespace std;

const int MAXN = 200005;
vector<pair<int,int> > g[MAXN];
vector<char> used(MAXN,0);
vector<int> sz(MAXN,0);
vector<pair<int,int> > cur(MAXN);
int Ans = 1e9;
int n,k;

void dfs_sizes(int v,int p) {
    sz[v] = 1;
    for(int i=0;i<g[v].size();i++) {
        int to = g[v][i].first;
        if (to==p || used[to]) continue;
        dfs_sizes(to,v);
        sz[v]+=sz[to];
    }
}

int centroid(int v,int p,int ss) {
    for(int i=0;i<g[v].size();i++) {
        int to = g[v][i].first;
        if (to==p || used[to]) continue;
        if (sz[to] > ss/2) return centroid(to,v,ss);
    }
    return v;
}

void dfs_func(int v,int p,pair<int,int> func) {
    if (func.first>k) return;
    cur[cursz++] = func;
    int len = func.first, cnt = func.second;
    for(int i=0;i<g[v].size();i++) {
        int to = g[v][i].first;
        if (to==p || used[to]) continue;
        if (len+g[v][i].second > k) return;
        dfs_func(to,v,{len+g[v][i].second,cnt+1});
    }
}

const int MAXK = 1e6 + 10;
vector<int> ans(MAXK,-1);
vector<int> changed(MAXK);

int cursz = 0;
int chsz = 0;
void solve(int v) {

    dfs_sizes(v,-1);
    int c = centroid(v,-1,sz[v]);
    used[c] = 1;

    ans[0] = 0;
    ch[chsz++] = 0;
    for(int i=0;i<g[c].size();i++) {
        int ch = g[c][i].first;
        cursz = 0;
        dfs_func(ch,c,{g[c][i].second,1});

        for(int j=0;j<cursz;j++) {
            int len = cur[j].first, cnt = cur[j].second;
            if (ans[k-len]!=-1) Ans = min(Ans,ans[k-len] + cnt);
        }
        for(int j=0;j<cursz;j++) {
            int len = cur[j].first, cnt = cur[j].second;
            if (ans[len] == -1) {
                ans[len] = cnt;
                changed[chsz++] = len;
            }
            else ans[len] = min(ans[len],cnt);
        }
    }
    for(int i=0;i<chsz;i++) {
        ans[changed[i]] = -1;
    }
    chsz = 0;
    for(int i=0;i<g[c].size();i++) {
        if (!used[g[c][i].first]) solve(g[c][i].first);
    }
}

int best_path(int _n, int _k, int h[][2], int l[]) {

    n = _n;
    k = _k;
    for(int i=0;i<n-1;i++) {
        int u = h[i][0],v=h[i][1],len = l[i];
        g[u].push_back({v,len});
        g[v].push_back({u,len});
    }

    solve(0);

    if (Ans==1e9) return -1; else return Ans;
}

Compilation message (stderr)

race.cpp: In function 'void dfs_sizes(int, int)':
race.cpp:16:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     for(int i=0;i<g[v].size();i++) {
      |                 ~^~~~~~~~~~~~
race.cpp: In function 'int centroid(int, int, int)':
race.cpp:25:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |     for(int i=0;i<g[v].size();i++) {
      |                 ~^~~~~~~~~~~~
race.cpp: In function 'void dfs_func(int, int, std::pair<int, int>)':
race.cpp:35:9: error: 'cursz' was not declared in this scope; did you mean 'cur'?
   35 |     cur[cursz++] = func;
      |         ^~~~~
      |         cur
race.cpp:37:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |     for(int i=0;i<g[v].size();i++) {
      |                 ~^~~~~~~~~~~~
race.cpp: In function 'void solve(int)':
race.cpp:58:5: error: 'ch' was not declared in this scope; did you mean 'c'?
   58 |     ch[chsz++] = 0;
      |     ^~
      |     c
race.cpp:59:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |     for(int i=0;i<g[c].size();i++) {
      |                 ~^~~~~~~~~~~~
race.cpp:81:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |     for(int i=0;i<g[c].size();i++) {
      |                 ~^~~~~~~~~~~~