# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1217644 | cpdreamer | Stations (IOI20_stations) | C++20 | 0 ms | 0 KiB |
#include "stations.h"
#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e17;
typedef long long ll;
const ll MOD = (ll)1e9+7;
#define P pair
#define S second
#define F first
#define pb push_back
#define V vector
#define all(v) v.begin(), v.end()
V<int>adj[(int)1000];
V<P<int,int>>vp(1000);
int dep[1000];
int cnt=0;
void dfs(int n,int p) {
vp[n].F=cnt;
for (auto u:adj[n]) {
if(u==p)continue;
cnt++;
dep[u]=dep[n]+1;
dfs(u,n);
}
cnt++;
vp[n].S=cnt;
}
std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) {
cnt=0;
dep[0]=0;
for (int i=0;i<n-1;i++) {
adj[u[i]].pb(v[i]);
adj[v[i]].pb(u[i]);
}
dfs(0,-1);
V<int>l(n);
for (int i=0;i<n;i++) {
if (dep[i]%2==0) {
l[i]=vp[i].F;
}
else
l[i]=vp[i].S;
}
for (int i=0;i<n;i++) {
adj[i].clear();
}
return l;
}