답안 #1073117

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1073117 2024-08-24T09:39:13 Z Ignut 기지국 (IOI20_stations) C++17
0 / 100
613 ms 5548 KB
// Ignut

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int N = 1e5 + 123;
const int C = 1000;

vector<int> tree[N];

vector<int> euler;

int root;

void dfs(int v, int par) {
    euler.push_back(v);
    for (int to : tree[v]) {
        if (to != par) {
            dfs(to, v);
            if (v == root)
                euler.push_back(v);
        }
    }
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
    euler.clear();
    for (int i = 0; i < n; i ++) {
        tree[i].clear();
    }

    for (int i = 0; i < n - 1; i ++) {
        tree[u[i]].push_back(v[i]);
        tree[v[i]].push_back(u[i]);
    }

    root = 0;
    for (int i = 0; i < n; i ++)
        if (tree[i].size() > 2)
            root = i;
    
    dfs(root, -1);

    vector<int> lbl(n);
    lbl[root] = 0;

    int val = 0;
    for (int v : euler) {
        if (v == root) {
            val = ((val / C) + 1) * C;
            val ++;
            continue;
        }
        lbl[v] = val;
        val ++;
    }

    return lbl;
}

const int INF = 1e9 + 123;

int find_next_station(int s, int t, vector<int> c) {
    if (c.size() == 1)
        return c[0];
    for (int v : c)
        if (v == t)
            return t;
    bool isRoot = true;
    for (int v : c) {
        if (v % C == 1)
            isRoot = false;
    }
    if (isRoot) {
        for (int v : c) {
            if (v / C == t / C)
                return v;
        }
        // while (true);
        return c[0];
    }

    //

    if (c.size() != 2)
        while (true);
    
    int mn = min(c[0], c[1]);
    int mx = max(c[0], c[1]);

    if (mx / C == t / C) {
        // we are in the correct chain
        if (mx % C <= t % C)
            return mx;
        return mn;
    }

    // we are in the incorrect chain
    return mn;
}



# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2904 KB Invalid labels (values out of range). scenario=0, k=1000, vertex=1, label=2005
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 2648 KB Invalid labels (values out of range). scenario=0, k=1000, vertex=0, label=1008
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 355 ms 5548 KB Wrong query response.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 613 ms 5292 KB Output is correct
2 Correct 496 ms 5292 KB Output is correct
3 Correct 414 ms 5292 KB Output is correct
4 Correct 2 ms 5388 KB Output is correct
5 Incorrect 3 ms 5392 KB Wrong query response.
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 397 ms 5548 KB Wrong query response.
2 Halted 0 ms 0 KB -