# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1052378 | noyancanturk | Stations (IOI20_stations) | C++17 | 521 ms | 1456 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "stations.h"
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
const int lim=2000;
vector<int>v[lim];
int sz[lim];
int sbs(int node,int par){
sz[node]=1;
for(int j:v[node]){
if(j==par)continue;
sz[node]+=sbs(j,node);
}
return sz[node];
}
vector<int>labels;
void dfs(int node,int par,int l,int r,bool tag){
//cerr<<node<<" "<<par<<" "<<l<<" "<<r<<"\n";
assert(node<labels.size());
labels[node]=tag?l:r;
int past=tag;
for(int j:v[node]){
if(j==par)continue;
dfs(j,node,l+past,l+past+sz[j]-1,!tag);
past+=sz[j];
}
}
std::vector<int> label(int n, int k, std::vector<int> U, std::vector<int> V) {
for(int i=0;i<n;i++)v[i].clear();
for(int i=0;i<n-1;i++){
v[U[i]].pb(V[i]);
v[V[i]].pb(U[i]);
}
labels=vector<int>(n);
sbs(0,-1);
dfs(0,-1,0,n-1,1);
/*
for(int i=0;i<n;i++)cerr<<labels[i]<<" ";
cerr<<"\n";
*/
return labels;
}
int find_next_station(int s, int t, std::vector<int> c) {
if(s<c[0]){
for(int i=0;i+1<c.size();i++){
if(s<=t&&t<=c[i]){
return c[i];
}
}
return c[c.size()-1];
}else{
for(int i=int(c.size())-1;i;i--){
if(c[i]<=t&&t<=s){
return c[i];
}
}
return c[0];
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |