Submission #431956

#TimeUsernameProblemLanguageResultExecution timeMemory
431956gonengazitStations (IOI20_stations)C++14
8 / 100
899 ms540 KiB
#include "stations.h" #include <vector> #include <bits/stdc++.h> using namespace std; #define ii pair<int,int> #define x first #define y second vector<int> labels; vector<vector<int>> g; int tme; // void dfs1(int i,int f=0,int t=0, int s=0){ // int tin=++tme; // for(auto u:g[i]){ // if(u!=f){ // dfs1(u,i,(t+1)%2,(s+1)%3); // } // } // int tout=tme; // if(t==0){ // labels[i]=6*tin+3*t+s; // } // else{ // labels[i]=6*(tin+tout)+3*t+s; // } // } void dfs1(int i, int f=0){ int tin=++tme; for(auto u:g[i]){ if(u!=f){ dfs1(u,i); } } int tout=tme; labels[i]=tin*1000+tout; } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) { tme=-1; labels.assign(n,-1); for(int i=0; i<n; i++){ labels[i]=i; } return labels; g.assign(n,vector<int>()); for(int i=0; i<n-1; i++){ g[u[i]].push_back(v[i]); g[v[i]].push_back(u[i]); } dfs1(0); return labels; } ii get(int x){ return ii(x/3%2,x%3); } int find_next_station(int s, int t, std::vector<int> c) { // if(t<s){ // return c[0]; // } // else{ // return c[1]; // } int p=t; while(t){ t=(t-1)/2; if(t==s){ return p; } p=t; } return (s-1)/2; // int tin=t/1000; // int tout=t%1000; // int sin=s/1000; // int sout=s%1000; // int f; // for(auto i:c){ // int in=i/1000; // int out=i%1000; // if(in<sin){ // f=i; // continue; // } // if (tin>=in&&tout<=out){ // return i; // } // } // return f; // ii r=get(s); // s/=6; // vector<pair<ii,int>> cld; // int f=-1; // if(r.x==0){ // int prev=s; // for(auto i:c){ // if(get(i).y!=(r.y+1)%3){ // f=i; // continue; // } // int k=i/6; // cld.emplace_back(ii(prev+1,k-(prev+1)),i); // prev=k-(prev+1); // } // } // else{ // for(auto i:c){ // if(get(i).y!=(r.y+1)%3){ // f=i; // continue; // } // if(!cld.empty()) // cld.back().x.y=i/6-1; // cld.emplace_back(ii(i/6,-1),i); // } // if(!cld.empty()){ // cld.back().x.y=s-(cld[0].x.x-1); // } // } // ii h=get(t); // t/=6; // for(auto i:cld){ // if(h.x==0&&i.x.x<=t&&i.x.y>=t){ // return i.y; // } // else if(h.x==1&&2*i.x.x<=t&&2*i.x.y>=t){ // return i.y; // } // } // return f; } /* 1 5 100 0 1 1 2 1 3 2 4 3 0 1 2 1 2 2 1 4 2*/
#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...