제출 #1321743

#제출 시각아이디문제언어결과실행 시간메모리
1321743benjaminkleyn이주 (IOI25_migrations)C++20
16 / 100
38 ms1476 KiB
#include "migrations.h"
#include <bits/stdc++.h>
using namespace std;

int n;
int P[10000];
vector<int> g[10000];
int dist[10000] = {0};
void dfs(int u, int p = -1)
{
    if (p == -1) dist[u] = 0;
    for (int v : g[u]) if (v != p) {
        dist[v] = dist[u] + 1;
        dfs(v, u);
    }
}

int prev_a, prev_b;
int a, b;
void find_diameter()
{
    prev_a = a;
    prev_b = b;
    a = b = 0;
    dfs(0);
    for (int i = 0; i < n; i++)
        if (dist[i] > dist[a])
            a = i;

    // dfs(a);
    // for (int i = 0; i < n; i++)
    //     if (dist[i] > dist[b])
    //         b = i;
}

int send_message(int N, int i, int Pi)
{
    n = N;
    g[i].push_back(Pi);
    g[Pi].push_back(i);
    if (i == N - 2) {
        find_diameter();
        return (a >> 4) + 1;
    }
    if (i == N - 1) {
        find_diameter();
        if (a == N - 1)
            return 0;
        else
            return (a & 0b1111) + 1;
    }
    return 0;
}

std::pair<int, int> longest_path(std::vector<int> S)
{
    if (S.back() == 0)
        return {0, S.size() - 1};
    return {0, ((S[S.size() - 2] - 1) << 4) | (S.back() - 1)};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...