| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1292815 | lambd47 | 기지국 (IOI20_stations) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
using namespace std;
#define L(i,j,k) for(int i=(j);i<=(k);i++)
#define R(i,j,k) for(int i=(j);i>=(k);i--)
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(),(v).end()
#include "stations.h"
std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
vector<int> dp(n);
vector<vector<int>> adj(n);
L(i,0,n-2){
adj[u[i]].push_back(v[i]);
adj[v[i]].push_back(u[i]);
}
int node=0;
L(i,0,n-1)if(sz(adj[i])==1)ini=i;
int lst=-1;
int at=n-1;
while(true){
dp[node]=at;
if(sz(adj[node])==1 && lst==adj[node][0])return dp;
int pst=node;
if(sz(adj[node])==1)node=adj[node][0];
else node=adj[node][0]^adj[node][1]^lst;
lst=pst;
}
return dp;
}
int find_next_station(int s, int t, std::vector<int> c) {
if(s<t)return c.back();
else return c[0];
}
