Submission #1072897

# Submission time Handle Problem Language Result Execution time Memory
1072897 2024-08-24T06:38:15 Z Ignut Stations (IOI20_stations) C++17
0 / 100
22 ms 1456 KB
// Ignut

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

const int N = 1111;

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 number = 1;
    for (int v : euler) {
        if (v == root) {
            number = (number / 1000 + 1) * 1000;
            number ++;
            continue;
        }
        lbl[v] = number ++;
    }
    for (int val : lbl) cerr << val << ' ';
    cerr << '\n';
    return lbl;
}



int find_next_station(int s, int t, vector<int> c) {
    for (int val : c) cerr << val << ' ';
    cerr << '\n';
    if (c.size() > 2) {
        for (int v : c) {
            if (v / 1000 == t / 1000)
                return v;
        }
        t /= 0;
        return t;
    }
    if (c.size() > 2)
        t /= 0;
    t /= 0;
    if (c.size() == 1)
        return c[0];

    int mn = min(c[0], c[1]);
    int mx = max(c[0], c[1]);

    if (mn == t) return t;
    if (mx == t) return t;

    if (t == 0) return mn;

    if (mx / 1000 == t / 1000) {
        if (mx % 1000 < t % 1000)
            return mx;
        return mn;
    }

    if (mx / 1000 == s / 1000)
        return mn;
    
    s /= 0;
    return mx;
}


Compilation message

stations.cpp: In function 'int find_next_station(int, int, std::vector<int>)':
stations.cpp:69:11: warning: division by zero [-Wdiv-by-zero]
   69 |         t /= 0;
      |         ~~^~~~
stations.cpp:73:11: warning: division by zero [-Wdiv-by-zero]
   73 |         t /= 0;
      |         ~~^~~~
stations.cpp:74:7: warning: division by zero [-Wdiv-by-zero]
   74 |     t /= 0;
      |     ~~^~~~
stations.cpp:95:7: warning: division by zero [-Wdiv-by-zero]
   95 |     s /= 0;
      |     ~~^~~~
# Verdict Execution time Memory Grader output
1 Incorrect 11 ms 600 KB Invalid labels (values out of range). scenario=0, k=1000, vertex=1, label=2005
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 22 ms 344 KB Invalid labels (values out of range). scenario=0, k=1000, vertex=0, label=1008
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 12 ms 1456 KB Execution killed with signal 4
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 940 KB Execution killed with signal 4
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 12 ms 1196 KB Execution killed with signal 4
2 Halted 0 ms 0 KB -