Submission #1192082

#TimeUsernameProblemLanguageResultExecution timeMemory
1192082alexddStations (IOI20_stations)C++20
5 / 100
304 ms516 KiB
#include "stations.h" #include <bits/stdc++.h> using namespace std; void check(bool bl) { if(bl==0) while(1); } vector<int> con[1005]; int tin[1005]; int timer; void dfs(int nod, int par) { tin[nod] = timer; timer++; for(int adj:con[nod]) { if(adj==par) continue; dfs(adj,nod); } } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) { for(int i=0;i<n;i++) con[i].clear(); for(int i=0;i<n-1;i++) { con[u[i]].push_back(v[i]); con[v[i]].push_back(u[i]); } int root=0; for(int i=0;i<n;i++) if(con[i].size() < con[root].size()) root = i; timer=0; dfs(root,-1); vector<int> sol(n); for(int i=0;i<n;i++) sol[i] = tin[i]; return sol; } int find_next_station(int s, int t, std::vector<int> c) { if((int)c.size() == 1) return c[0]; for(int i=1;i<c.size();i++) check(c[i-1] <= c[i]); if(c[0] == s+1)///s e radacina { check(0); check(s==0); check(t > s); for(int i=1;i<c.size();i++) if(c[i] > t) return c[i-1]; return c.back(); } else { check(c[0] < s); check(c[1] == s+1); if(t < s) return c[0]; assert(c[1] <= t); for(int i=2;i<c.size();i++) if(c[i] > t) return c[i-1]; assert(c.back() <= t); return c.back(); } } /* 1 7 6 0 2 2 1 1 3 0 4 4 5 5 6 6 0 3 2 0 1 2 0 2 2 0 6 4 0 5 4 0 4 4 */
#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...