Submission #1272190

#TimeUsernameProblemLanguageResultExecution timeMemory
1272190StefanSebezFun Tour (APIO20_fun)C++20
0 / 100
2096 ms26756 KiB
#include "fun.h" #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,lg=18; vector<int>E[N]; int par[N][lg+1],depth[N]; void DFS(int u,int p=-1){ par[u][0]=p; for(int i=1;i<=lg;i++){if(par[u][i-1]!=-1)par[u][i]=par[par[u][i-1]][i-1];else par[u][i]=-1;} for(auto i:E[u]){ if(i!=p){ depth[i]=depth[u]+1; DFS(i,u); } } } int LCA(int u,int v){ if(depth[u]<depth[v])swap(u,v); for(int i=lg;i>=0;i--) if(par[u][i]!=-1&&depth[par[u][i]]>=depth[v]) u=par[u][i];if(u==v)return u; for(int i=lg;i>=0;i--) if(par[u][i]!=par[v][i]) u=par[u][i],v=par[v][i];return par[u][0]; } int Dist(int u,int v){return depth[u]+depth[v]-2*depth[LCA(u,v)];} //int dist[1000][1000]; vector<int> createFunTour(int n, int q){ for(int i=1;i<n;i++){ E[i].pb(i-1>>1); E[i-1>>1].pb(i); } DFS(0); /*for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ dist[i][j]=dist[j][i]=hoursRequired(i,j); } }*/ int u=0; for(int i=0;i<n;i++) if(Dist(u,0)<Dist(i,0)) u=i; bool was[n+10]={false}; vector<int>res={u};was[u]=true; for(int j=1;j<n;j++){ int maks=0,v; for(int i=0;i<n;i++){ if(was[i]) continue; if(maks<=Dist(u,i)) maks=Dist(u,i),v=i; } res.pb(v); was[v]=true; u=v; } return res; /*int u=0; for(int i=0;i<n;i++) if(dist[u][0]<dist[i][0]) u=i; bool was[n+10]={false}; vector<int>res={u};was[u]=true; for(int j=1;j<n;j++){ int maks=0,v; for(int i=0;i<n;i++){ if(was[i]) continue; if(maks<=dist[u][i]) maks=dist[u][i],v=i; } res.pb(v); was[v]=true; u=v; } return res;*/ /*int H = hoursRequired(0, N - 1); int A = attractionsBehind(0, N - 1); return std::vector<int>(N);*/ }
#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...