Submission #1362698

#TimeUsernameProblemLanguageResultExecution timeMemory
1362698silence25Fun Tour (APIO20_fun)C++20
26 / 100
12 ms1516 KiB
#include "fun.h"

// author: yanybayev

#include "bits/stdc++.h"

using namespace std;

#define ff first
#define ss second
#define pp pop_back
#define ll long long
#define pb push_back
#define ls(v) (int)v.size()
#define all(v) v.begin(),v.end()
#define rall(v) v.rbegin(),v.rend()
#define wr cout << "------------------------" << endl

const int MAXN = 505;
vector<int> g[MAXN];
int dist[MAXN];
int vis[MAXN];
int dp[MAXN][MAXN];
int best[MAXN];

vector<int> createFunTour(int N, int Q) {
	for (int i = 0;i<N;++i) {
		for (int j = i + 1;j<N;++j) {
			if (hoursRequired(i, j) == 1) {
				g[i].pb(j);
				g[j].pb(i);
			}
		}
	}
	auto dfs = [&] (auto &&self, int nd, int D) -> void {
		dist[nd] = D;
		vis[nd] = 1;
		for (auto it : g[nd]) if(!vis[it]) self(self, it, D + 1);
	};

	int root = 0;
	for (int i = 0;i<N;++i) {
		fill(dist, dist + N, 0);
		fill(vis, vis + N, 0);
		dfs(dfs, i, 0);
		for (int j = 0;j<N;++j) {
			dp[i][j] = dist[j];
			best[i] = max(best[i], dp[i][j]);
		}
		if (best[root] < best[i]) root = i;
	}
	vector<int> ans;
	fill(vis, vis + N, 0);
	auto construct = [&] (auto &&self, int nd) -> void {
		vis[nd] = 1;
		ans.pb(nd);
		int st = -1;
		for (int i = 0;i<N;++i) {
			if (!vis[i] and (st == -1 or dp[nd][i] > dp[nd][st])) st = i;
		}
		if (~st) self(self, st);
	};
	construct(construct, root);
	return ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...