Submission #1292758

#TimeUsernameProblemLanguageResultExecution timeMemory
1292758lucasdmyStations (IOI20_stations)C++20
0 / 100
4 ms588 KiB
#include "stations.h" #include <bits/stdc++.h> using namespace std; const int MAXN=1010; vector<int>graph[MAXN], ord, aux(MAXN), sub_size(MAXN), inv(MAXN), labels; void dfs(int x, int p){ ord.push_back(x); aux[x]=0; for(int k=0;k<graph[x].size();k++){ int neighbour=graph[x][k]; if(neighbour!=p){ dfs(neighbour, x); aux[x]+=1+aux[neighbour]; } } } vector<int> label(int n, int m, vector<int>a, vector<int>b){ for(int k=0;k<n;k++){ graph[k].clear(); } ord.clear(); for(int k=0;k<n-1;k++){ graph[a[k]].push_back(b[k]); graph[b[k]].push_back(a[k]); } dfs(0, 0); labels.resize(n); for(int k=0;k<n;k++){ labels[ord[k]]=k; inv[k]=ord[k]; sub_size[k]=aux[ord[k]]; } for(int k=0;k<n;k++){ for(int i=0;i<graph[k].size();i++){ graph[k][i]=labels[graph[k][i]]; } sort(graph[k].begin(), graph[k].end()); } return labels; } int find_next_station(int at, int end, vector<int>adj){ if(end>at+sub_size[at] or end<at){ return graph[inv[at]][0]; } for(int k=graph[inv[at]].size()-1;k>0;k--){ if(end>=graph[inv[at]][k]){ return graph[inv[at]][k]; } } return 0; } /*int main(){ int r; cin>>r; while(r--){ int n, m; cin>>n>>m; vector<int>a(n-1), b(n-1); for(int k=0;k<n-1;k++){ cin>>a[k]; } for(int k=0;k<n-1;k++){ cin>>b[k]; } label(n, m, a, b); int q; cin>>q; int at, end; for(int k=0;k<q;k++){ cin>>at>>end; vector<int>adj; for(int i=0;i<graph[at].size();i++){ adj.push_back(graph[at][i]); } sort(adj.begin(), adj.end()); cout<<find_next_station(at, end, adj)<<endl<<endl; } } }*/
#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...