제출 #1303579

#제출 시각아이디문제언어결과실행 시간메모리
1303579nikoloz-ch이주 (IOI25_migrations)C++20
0 / 100
31 ms952 KiB
#include <bits/stdc++.h>
using namespace std;

int p[10001];
vector<vector<int>> a;
vector<int> v;
void dfs(int u, int k, int cnt){
    v[u] = cnt;
    for(int e : a[u]) if(e != k) dfs(e, u, cnt + 1);
}
int vt[7];
pair<int,int> ml = {-1,-1};

int send_message(int N, int i, int Pi){
    p[i] = Pi;
    if(i >= N - 14 && i < N - 7){
        a.assign(N + 1, {}); v.assign(N + 1, 0);
        for(int j = 1; j <= N; j++) a[p[j]].push_back(j);
        dfs(0, -1, 0);
        int u = 0;
        for(int j = 0; j <= N; j++) if(v[j] > v[u]) u = j;
        dfs(u, -1, 0);
        int vtx = u;
        for(int j = 0; j <= N; j++) if(v[j] > v[vtx]) vtx = j;
        int x = u, y = vtx;
        if(x > y) swap(x, y);
        if(i == N - 1 && ml.first != -1 && make_pair(x, y) != ml) return 4;
        ml = make_pair(x, y);
        int tmp = x;
        for(int d = 6; d >= 0; --d){ vt[d] = tmp % 4; tmp /= 4; }
        return vt[i - (N - 14)];
    } else if(i >= N - 7){
        a.assign(N + 1, {}); v.assign(N + 1, 0);
        for(int j = 1; j <= N; j++) a[p[j]].push_back(j);
        dfs(0, -1, 0);
        int u = 0;
        for(int j = 0; j <= N; j++) if(v[j] > v[u]) u = j;
        dfs(u, -1, 0);
        int vtx = u;
        for(int j = 0; j <= N; j++) if(v[j] > v[vtx]) vtx = j;
        int x = u, y = vtx;
        if(x > y) swap(x, y);
        if(i == N - 1 && ml.first != -1 && make_pair(x, y) != ml) return 4;
        ml = make_pair(x, y);
        int tmp = y;
        for(int d = 6; d >= 0; --d){ vt[d] = tmp % 4; tmp /= 4; }
        return vt[i - (N - 7)];
    }
    return 0;
}

pair<int,int> longest_path(vector<int> S){
    int a1 = 0, a2 = 0;
    for(int i = S.size() - 14; i < S.size() - 7; ++i){
        if(S[i] == 4) return {0, i};
        a1 = a1 * 4 + S[i];
    }
    for(int i = S.size() - 7; i < S.size(); ++i){
        if(S[i] == 4) return {0, i};
        a2 = a2 * 4 + S[i];
    }
    if(a1 > a2) swap(a1, a2);
    return {a1, a2};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...