제출 #1337524

#제출 시각아이디문제언어결과실행 시간메모리
1337524vladilius이주 (IOI25_migrations)C++20
0 / 100
30 ms1292 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second

vector<int> p;

int find(){
    int n = (int) p.size();

    vector<int> g[n];
    for (int i = 1; i < n; i++){
        g[p[i]].pb(i);
        g[i].pb(p[i]);
    }
    
    function<pii(int, int)> dfs = [&](int v, int pr){
        pii out = {0, v};
        for (int i: g[v]){
            if (i == pr) continue;
            auto [d, x] = dfs(i, v);
            out = max(out, {d + 1, x});
        }
        return out;
    };
    
    auto [d, x1] = dfs(0, 0);
    return x1;
}

vector<int> s;
int f;

int send_message(int n, int i, int k){
    if (i == 1) p.pb(0);
    p.pb(k);
    
    if (i < (n - 5)) return 0;
    
    if (i == (n - 5)){
        f = find();
        for (int w = 0; w < 5; w++){
            s.pb(f % 4);
            f /= 4;
        }
    }
    
    if (find() == i){
        return 4;
    }
    
    int r = s.back(); s.pop_back();
    return r;
}

pii longest_path(vector<int> s){
    int n = (int) s.size();
    for (int i = n - 1; i >= n - 5; i--){
        if (s[i] == 4) return {0, i + 1};
    }

    int k = s[n - 1] + 4 * s[n - 2] + 16 * s[n - 3] + 64 * s[n - 4] + 256 * s[n - 5];
    
    return {0, k};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...