Submission #1226031

#TimeUsernameProblemLanguageResultExecution timeMemory
1226031KALARRYFun Tour (APIO20_fun)C++20
26 / 100
12 ms8520 KiB
//chockolateman #include<bits/stdc++.h> #include "fun.h" using namespace std; const int INF = 1e9; int hoursRequired(int X, int Y); int attractionsBehind(int X, int Y); int n,dist[505][505]; vector<int> adj[100005]; set<int> distances[100005]; bool used[5005]; void dfs(int v,int p,int root) { for(auto u : adj[v]) if(u != p) { dist[root][u] = dist[root][v] + 1; dfs(u,v,root); } } stack<int> ans; std::vector<int> createFunTour(int N, int Q) { n = N; int H = hoursRequired(0, N - 1); int A = attractionsBehind(0, N - 1); vector<int> ret; if(n <= 500) { for(int i = 0 ; i < N ; i++) for(int j = i+1 ; j < N ; j++) { if(hoursRequired(i, j) == 1) { adj[i].push_back(j); adj[j].push_back(i); } } for(int i = 0 ; i < N ; i++) dfs(i,i,i); int cur_dist = 0; int i,j; for(int x = 0 ; x < N ; x++) for(int y = x+1 ; y < N ; y++) if(dist[x][y] > cur_dist) { i = x; j = y; cur_dist = dist[x][y]; } ret.push_back(i); ret.push_back(j); int prev = j; used[i] = true; used[j] = true; int counter = 2; while(counter < N) { int prev_dist = cur_dist; int y = 1; cur_dist = 0; for(int x = 0 ; x < N ; x++) if(!used[x] && dist[prev][x] <= prev_dist && dist[prev][x] >= cur_dist) { y = x; cur_dist = dist[prev][x]; } ret.push_back(y); prev = y; used[y] = true; counter++; } } return ret; }
#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...