# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
693270 | NemanjaSo2005 | 기지국 (IOI20_stations) | C++14 | 0 ms | 0 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<bits/stdc++.h>
#include "stations.h"
#define ll long long
using namespace std;
ll N,K,in[1005],out[1005],vrem=0;
vector<ll> stablo[1005],L;
void dfs(ll gde,ll pret){
// cout<<gde<<" dfs "<<pret<<endl;
in[gde]=vrem;
vrem++;
for(int i=0;i<stablo[gde].size();i++)
if(stablo[gde][i]!=pret)
dfs(stablo[gde][i],gde);
out[gde]=vrem;
return;
}
vector<int> label(int n,int k,vector<int> u,vector<int> v){
N=n;
K=k;
for(ll i=0;i<N;i++)
stablo[i].clear();
for(ll i=0;i<N-1;i++){
stablo[u[i]].push_back(v[i]);
stablo[v[i]].push_back(u[i]);
}
vrem=0;
dfs(0,0);
L.clear();
for(ll i=0;i<N;i++){
// cout<<in[i]<<" "<<out[i]<<endl;
L.push_back(in[i]*1000+out[i]);
}
return L;
}
struct slog{
ll in,out;
}niz[1005],tren,tar;
bool isparent(slog a,slog b){
return a.in<=b.in and a.out>=b.out;
}
int find_next_station(int s,int t,vector<int> c){
/*
cout<<s<<" "<<t<<" | ";
for(int i=0;i<c.size();i++)
cout<<c[i]<<" ";
cout<<endl;*/
N=c.size();
for(ll i=0;i<N;i++){
niz[i].in=c[i]/1000;
niz[i].out=c[i]%1000;
}
tar.in=t/1000;
tar.out=t%1000;
tren.in=s/1000;
tren.out=s%1000;/*
cout<<tren.in<<" "<<tren.out<<" "<<tar.in<<" "<<tar.out<<" | ";
for(int i=0;i<c.size();i++)
cout<<niz[i].in<<" "<<niz[i].out<<" ";
cout<<endl;*/
for(ll i=0;i<N;i++)
if(isparent(niz[i],tren)){
swap(niz[i],niz[N-1]);
swap(c[i],c[N-1]);
N--;
break;
}/*
cout<<"BEZ RODITELJA"<<endl;
for(int i=0;i<c.size();i++)
cout<<niz[i].in<<" "<<niz[i].out<<" ";
cout<<endl;*/
for(ll i=0;i<N;i++)
if(isparent(niz[i],tar)){
//cout<<niz[i].in<<" par "<<
return c[i];
}
return c[N];
}