Submission #1244536

#TimeUsernameProblemLanguageResultExecution timeMemory
1244536qwushaStations (IOI20_stations)C++20
16 / 100
309 ms592 KiB

#include "stations.h"

#include <iostream>
#include <bits/stdc++.h>

#define fi first
#define se second

using namespace std;

int inf = 1e9 + 7;

vector<vector<int>> g;
vector<int> par;

void dfs(int v, int p = -1) {
    par[v] = p;
    for (auto u : g[v]) {
        if (u != p) {
            dfs(u, v);
        }
    }
}

vector<int> label(int n, int k, vector<int> v, vector<int> u) {
    vector<int> res(n);
    g.assign(n, {});
    par.assign(n , -1);
    int end = -1, end2 = -1;
    for (int i = 0; i < n - 1; i++) {
        g[v[i]].push_back(u[i]);
        g[u[i]].push_back(v[i]);
    }
    int cent = -1, maxi = 0;
    vector<int> s;
    for (int i = 0; i < n; i++) {
        if (g[i].size() == 1) {
            s.push_back(i);
        }
        if (g[i].size() > maxi) {
            maxi = g[i].size();
            cent = i;
        }
    }
    dfs(cent);
    res[cent] = 0;
    vector<int> meow(s.size());
    for (int i = 0; i < s.size(); i++) {
        meow[i] = i + 1;
    }
    int gr = maxi;
    for (int j = 0; j < s.size(); j++) {
        int el = s[j];
        int cur = el;
        vector<int> ve;
        while (cur != cent) {
            ve.push_back(cur);
            cur = par[cur];
        }
        reverse(ve.begin(), ve.end());
        for (int i = 0; i < ve.size(); i++) {
            res[ve[i]] = i * gr + meow[j];
        }
    }
    return res;
}

int find_next_station(int s, int t, vector<int> c) {
    if (c.size() == 1) {
        return c[0];
    }
    if (s == 0) {
        int r = t % c.size();
        if (r == 0)
            r += c.size();
        return r;
    }
    int dif = max(c[0], c[1]) - s;
    if (t % dif == s % dif) {
        if (t > s) {
            return max(c[0], c[1]);
        } else {
            return min(c[0], c[1]);
        }
    } else {
        return min(c[0], c[1]);
    }
}


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...