| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1296342 | eri16 | 기지국 (IOI20_stations) | C++20 | 0 ms | 0 KiB |
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> lbl;
int t=-1;
vector<vector<int>> adj(1005);
void dfs(int node, int parent){
int tin=++t;
for(int child : adj[node])
if(child != parent) dfs(child,node);
int tout=t;
lbl[node]=tout*1000+tin;
}
vector<int> label(int n, int k, vector<int> u, vector<int> v){
lbl.resize(n);
for(int i=0; i<n-1; i++) {
adj[u[i]].push_back(v[i]);
adj[v[i]].push_back(u[i]);
}
dfs(0,-1);
return lbl;
}
int find_next_station(int start, int final, vector<int> rel){
final-=(final/1000)*1000;
int outmx=rel[rel.size()-1]/1000;
int cur=0;
while(cur<rel.size()){
int child=rel[cur];
int in=child-(child/1000)*1000;
int out=child/1000;
if(out==outmx)break;
if(in<=t && t<=out)return child;
cur++;
}
for(int j=rel.size()-1; j>=cur; j--){
int child=rel[j];
int in=child-(child/1000)*1000;
int out=child/1000;
if(in<=t && t<=out)return child;
}
return c[cur];
}
