제출 #1148850

#제출 시각아이디문제언어결과실행 시간메모리
1148850FaresSTH기지국 (IOI20_stations)C++20
0 / 100
298 ms548 KiB
#include "bits/stdc++.h"
using namespace std;
using ll = long long;
const ll mod = 1e9 + 7, inf = 9e18;
#define all(x) x.begin(), x.end()
#define len(x) ll(x.size())
#define mp make_pair
#define S second
#define F first
vector<int> adj[1000];
int ft[1000], t;

void dfs(int i) {
    ft[i] = 1;
    for (int j : adj[i]) {
        if (ft[j]) continue;
        dfs(j);
    }
    ft[i] = ++t;
}

vector<int> label(int n, int k, vector<int> u, vector<int> v) {
    for (int i = 0; i < n - 1; i++) {
        adj[u[i]].push_back(v[i]);
        adj[v[i]].push_back(u[i]);
    }
    dfs(0); vector<int> res;

    for (int i = 0; i < n; i++) {
        res.push_back(ft[i] - 1);
        adj[i].clear();
        ft[i] = 0;
    }
    t = 0;
    return res;
}

int find_next_station(int s, int t, vector<int> ft) {
    int sum = 0;
    vector<int> dt(len(ft));
    for (int i = 1; i < len(ft) - 1; i++) {
        dt[i] = ft[i] - ft[i - 1];
        sum += ft[i] - dt[i] + 1;
    }
    dt[0] = ft[0] - (ft[0] - (ft.back() - sum)) + 1;
    int res = ft.back();

    for (int i = 0; i < len(ft) - 1; i++) {
        if (dt[i] <= t && t <= ft[i]) res = ft[i];
    }
    return res;
}
#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...