Submission #1132387

#TimeUsernameProblemLanguageResultExecution timeMemory
1132387StefanSebezStations (IOI20_stations)C++20
36.13 / 100
310 ms2900 KiB
#include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define ll long long #define ld long double const int N=1e5+50,M=1050; vector<int>E[N]; int in[N],out[N],nc=-1; void DFS(int u,int parent=-1){ in[u]=++nc; for(auto i:E[u]){ if(i!=parent) DFS(i,u); } out[u]=nc; } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v){ for(int i=0;i<n-1;i++){ E[u[i]].pb(v[i]); E[v[i]].pb(u[i]); } int root=0; /*for(int i=0;i<n;i++){ if(E[i].size()==1) root=i; }*/ DFS(root); vector<int>lbl;for(int i=0;i<n;i++) lbl.pb(in[i]+M*out[i]); for(int i=0;i<=n;i++) E[i].clear(),in[i]=out[i]=0,nc=-1; return lbl; } int IN(int x){return x%M;} int OUT(int x){return x/M;} bool Podstablo(int x,int y){if(IN(x)<=IN(y)&&IN(y)<=OUT(x))return true;return false;} int find_next_station(int s, int t, std::vector<int> c){ /*int res=c[0]; if(s<t){ for(int i=0;i<c.size();i++){ int u=c[i]; if(u>s) res=u; } } else{ for(int i=0;i<c.size();i++){ int u=c[i]; if(u<s) res=u; } }*/ int res=c[0]; //if(IN(s)<=IN(t)&&IN(t)<=OUT(s)){ if(Podstablo(s,t)){ for(auto i:c){ //if(IN(i)<=IN(t)&&IN(t)<=OUT(i)) res=i; if(Podstablo(i,t)&&!Podstablo(i,s)) res=i; } } else{ for(auto i:c){ //if(IN(i)<=IN(s)&&IN(s)<=OUT(i)) res=i; if(Podstablo(i,s)) res=i; } } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...