Submission #1049290

# Submission time Handle Problem Language Result Execution time Memory
1049290 2024-08-08T15:59:35 Z beaconmc Race (IOI11_race) C++14
31 / 100
2682 ms 100744 KB
#include "race.h"
#include <bits/stdc++.h>
 
typedef long long ll;
#define FOR(i,x,y) for(ll i=x; i<y; i++)
#define FORNEG(i,x,y) for(ll i=x; i>y; i--)

using namespace std;

const ll maxn = 200005;
const ll INF = 1000000000;

vector<vector<ll>> edges[maxn];
ll par[maxn];
ll centpar[maxn];
ll depth[maxn];
ll realdepth[maxn];
ll ancc[maxn][20];
bool visited[maxn];
ll sub[maxn];
vector<array<ll,2>> idkman;
ll ans = INF;
ll KK;
ll sus[maxn];

ll anc(ll a, ll x){
    if (a==0) return 0;
    if (x==0) return par[a];
    if (ancc[a][x] != -1) return ancc[a][x];
    return ancc[a][x] = anc(anc(a,x-1),x-1);
}

ll lca(ll a, ll b){
    if (depth[a] < depth[b]) swap(a,b);
    FORNEG(i,19,-1) if (depth[anc(a, i)] >= depth[b]) a = anc(a,i);
    if (a==b) return a;
    FORNEG(i,19,-1) if (anc(a,i) != anc(b,i)) a = anc(a,i), b = anc(b,i);
    return par[a];
}

void initdfs(ll a,ll p, ll d, ll dd){
    par[a] = p;
    depth[a] = d;
    realdepth[a] = dd;
    for (auto&i : edges[a]){
        if (i[0] != p) initdfs(i[0], a, d+1, dd+i[1]);
    }
}

ll centroid(ll root, ll a, ll p){
    for (auto&i : edges[a]){
        if (!visited[i[0]] && i[0] != p && sub[i[0]] > sub[root]/2) return centroid(root, i[0], a);
    }
    return a;
}
void dfs(ll a, ll p){
    sub[a] = 1;
    for (auto&i : edges[a]){

        if(i[0] != p && !visited[i[0]]) dfs(i[0], a), sub[a] += sub[i[0]];
    }
}
void dfs2(ll a, ll p, ll d, ll dd){
    for (auto&i : edges[a]){
        if (i[0] != p && !visited[i[0]]) dfs2(i[0], a, d+1,dd + i[1]);
    }
    idkman.push_back({d, dd});
}
void build(ll a, ll p){
    dfs(a,p);
    ll cent = centroid(a, a, p);
    vector<ll> seen;

    sus[0] = 0;
    for (auto&i : edges[cent]){
        idkman.clear();
        dfs2(i[0], cent, 1,i[1]);
        seen.push_back(0);
        sus[0] = 0;

        for (auto&k : idkman){
            ll req = KK - k[1];

            if (0<=req && req <= KK) ans = min(ans, k[0] + sus[req]);
        }
        for (auto&k : idkman){
            seen.push_back(k[1]);
            if (0<=k[1] && k[1] <= KK) sus[k[1]] = min(sus[k[1]], k[0]);

        }
    }
    for (auto&k : seen) if (0<=k && k<=KK) sus[k] = INF;



    centpar[cent] = p;
    visited[cent] = 1;
    for (auto&i : edges[cent]){
        if (!visited[i[0]]) build(i[0], cent);
    }
}

vector<array<ll,3>> dists[maxn];

int best_path(int N, int K, int H[][2], int L[])
{
    KK = K;
    FOR(i,0,maxn) par[i] = -1, centpar[i] = -1, par[i] -1, depth[i] = -1, realdepth[i] = -1,visited[i] = 0,dists[i].clear(),edges[i].clear(), sus[i] = INF;
    FOR(i,0,maxn)FOR(j,0,20) ancc[i][j] = -1;
    
    
    FOR(i,0,N-1){

        edges[H[i][0]].push_back({H[i][1], L[i]});
        edges[H[i][1]].push_back({H[i][0], L[i]});
    }

    
    initdfs(0,-1,0,0);
    dfs(0,-1);

    build(0,-1);



    if (ans >= INF) return -1;
    else return ans;

}












Compilation message

race.cpp: In function 'int best_path(int, int, int (*)[2], int*)':
race.cpp:108:56: warning: right operand of comma operator has no effect [-Wunused-value]
  108 |     FOR(i,0,maxn) par[i] = -1, centpar[i] = -1, par[i] -1, depth[i] = -1, realdepth[i] = -1,visited[i] = 0,dists[i].clear(),edges[i].clear(), sus[i] = INF;
      |                                                 ~~~~~~~^~
# Verdict Execution time Memory Grader output
1 Correct 6 ms 54364 KB Output is correct
2 Correct 6 ms 54364 KB Output is correct
3 Correct 6 ms 54360 KB Output is correct
4 Correct 6 ms 54364 KB Output is correct
5 Correct 6 ms 54364 KB Output is correct
6 Correct 6 ms 54348 KB Output is correct
7 Correct 6 ms 54320 KB Output is correct
8 Correct 6 ms 54364 KB Output is correct
9 Correct 6 ms 54356 KB Output is correct
10 Correct 6 ms 54364 KB Output is correct
11 Correct 6 ms 54364 KB Output is correct
12 Correct 6 ms 54364 KB Output is correct
13 Correct 6 ms 54312 KB Output is correct
14 Correct 6 ms 54360 KB Output is correct
15 Correct 6 ms 54364 KB Output is correct
16 Correct 6 ms 54352 KB Output is correct
17 Correct 6 ms 54320 KB Output is correct
18 Correct 6 ms 54372 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 54364 KB Output is correct
2 Correct 6 ms 54364 KB Output is correct
3 Correct 6 ms 54360 KB Output is correct
4 Correct 6 ms 54364 KB Output is correct
5 Correct 6 ms 54364 KB Output is correct
6 Correct 6 ms 54348 KB Output is correct
7 Correct 6 ms 54320 KB Output is correct
8 Correct 6 ms 54364 KB Output is correct
9 Correct 6 ms 54356 KB Output is correct
10 Correct 6 ms 54364 KB Output is correct
11 Correct 6 ms 54364 KB Output is correct
12 Correct 6 ms 54364 KB Output is correct
13 Correct 6 ms 54312 KB Output is correct
14 Correct 6 ms 54360 KB Output is correct
15 Correct 6 ms 54364 KB Output is correct
16 Correct 6 ms 54352 KB Output is correct
17 Correct 6 ms 54320 KB Output is correct
18 Correct 6 ms 54372 KB Output is correct
19 Correct 6 ms 54364 KB Output is correct
20 Correct 6 ms 54364 KB Output is correct
21 Correct 7 ms 54364 KB Output is correct
22 Incorrect 6 ms 54364 KB Output isn't correct
23 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 6 ms 54364 KB Output is correct
2 Correct 6 ms 54364 KB Output is correct
3 Correct 6 ms 54360 KB Output is correct
4 Correct 6 ms 54364 KB Output is correct
5 Correct 6 ms 54364 KB Output is correct
6 Correct 6 ms 54348 KB Output is correct
7 Correct 6 ms 54320 KB Output is correct
8 Correct 6 ms 54364 KB Output is correct
9 Correct 6 ms 54356 KB Output is correct
10 Correct 6 ms 54364 KB Output is correct
11 Correct 6 ms 54364 KB Output is correct
12 Correct 6 ms 54364 KB Output is correct
13 Correct 6 ms 54312 KB Output is correct
14 Correct 6 ms 54360 KB Output is correct
15 Correct 6 ms 54364 KB Output is correct
16 Correct 6 ms 54352 KB Output is correct
17 Correct 6 ms 54320 KB Output is correct
18 Correct 6 ms 54372 KB Output is correct
19 Correct 157 ms 72532 KB Output is correct
20 Correct 151 ms 73288 KB Output is correct
21 Correct 152 ms 72788 KB Output is correct
22 Correct 139 ms 72720 KB Output is correct
23 Correct 98 ms 73680 KB Output is correct
24 Correct 86 ms 72268 KB Output is correct
25 Correct 134 ms 77028 KB Output is correct
26 Correct 105 ms 78568 KB Output is correct
27 Correct 2228 ms 91264 KB Output is correct
28 Correct 324 ms 100744 KB Output is correct
29 Correct 326 ms 99760 KB Output is correct
30 Correct 2247 ms 90308 KB Output is correct
31 Correct 2201 ms 90316 KB Output is correct
32 Correct 2682 ms 90572 KB Output is correct
33 Correct 243 ms 89924 KB Output is correct
34 Correct 244 ms 87884 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 54364 KB Output is correct
2 Correct 6 ms 54364 KB Output is correct
3 Correct 6 ms 54360 KB Output is correct
4 Correct 6 ms 54364 KB Output is correct
5 Correct 6 ms 54364 KB Output is correct
6 Correct 6 ms 54348 KB Output is correct
7 Correct 6 ms 54320 KB Output is correct
8 Correct 6 ms 54364 KB Output is correct
9 Correct 6 ms 54356 KB Output is correct
10 Correct 6 ms 54364 KB Output is correct
11 Correct 6 ms 54364 KB Output is correct
12 Correct 6 ms 54364 KB Output is correct
13 Correct 6 ms 54312 KB Output is correct
14 Correct 6 ms 54360 KB Output is correct
15 Correct 6 ms 54364 KB Output is correct
16 Correct 6 ms 54352 KB Output is correct
17 Correct 6 ms 54320 KB Output is correct
18 Correct 6 ms 54372 KB Output is correct
19 Correct 6 ms 54364 KB Output is correct
20 Correct 6 ms 54364 KB Output is correct
21 Correct 7 ms 54364 KB Output is correct
22 Incorrect 6 ms 54364 KB Output isn't correct
23 Halted 0 ms 0 KB -