Submission #741412

#TimeUsernameProblemLanguageResultExecution timeMemory
741412vjudge1즐거운 행로 (APIO20_fun)C++17
26 / 100
50 ms35732 KiB
///////////////////////////////////////////

#include "fun.h"

#include <vector>
#include <bits/stdc++.h>

using namespace std;

const int N2 = 1000;
int d[N2][N2];
vector <int> a[N2];
bool vis[N2];

void dfs(vector <int> &d, int u, int par = -1){
  for(int i : a[u]){
    if (i == par || vis[i]) continue;

    d[i] = d[u] + 1;
    dfs(d, i, u);
  }
}

std::vector<int> createFunTour(int N, int Q) {
  for(int i = 0; i < N; ++i){
    for(int j = i + 1; j < N; ++j){
      d[i][j] = d[j][i] = hoursRequired(i, j);
      if (hoursRequired(i, j) == 1){
        a[i].push_back(j);
        a[j].push_back(i);
      }
    }
  }

  vector <int> d(N, 0);
  dfs(d, 1);

  pair<int, int> ma = {-1, -1};
  for(int i = 0; i < N; ++i){
    ma = max(ma, {d[i], i});
  }

  vector <int> ans;

  int u = ma.second;
  ans.push_back(u);
  vis[u] = true;

  while ((int)ans.size() < N){
    d[u] = 0; dfs(d, u);

    pair<int, int> ma = {-1, -1};
    for(int i = 0; i < N; ++i){
      if (vis[i]) continue;
      ma = max(ma, {d[i], i});
    }

    u = ma.second;
    ans.push_back(u);
    vis[u] = true;
  }

  return ans;
}
#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...