제출 #724911

#제출 시각아이디문제언어결과실행 시간메모리
724911hollwo_pelw즐거운 행로 (APIO20_fun)C++17
10 / 100
1 ms340 KiB
#include "fun.h" // #include "grader.cpp" #include <bits/stdc++.h> using namespace std; // int H = hoursRequired(0, N - 1); // int A = attractionsBehind(0, N - 1); vector<int> createFunTour(int N, int Q) { int centroid = 0, subsiz = N; for (int i = 1; i < N; i++) { int csubsiz = attractionsBehind(0, i); if (csubsiz > N / 2 && csubsiz < subsiz) centroid = i, subsiz = csubsiz; } vector<int> depth(N); for (int i = 0; i < N; i++) depth[i] = i == centroid ? 0 : hoursRequired(centroid, i); vector<int> g, type(N, 0); for (int i = 0; i < N; i++) if (depth[i] == 1) { g.push_back(i); } const int M = g.size(); for (int i = 0; i < N; i++) if (i != centroid) { for (int j = 1; j < M; j++) { if (hoursRequired(g[j], i) == depth[i] - 1) { type[i] = j; break; } } } // cout << centroid << '\n'; // cout << M << '\n'; // for (int i = 0; i < N; i++) { // cout << depth[i] << ' ' << type[i] << '\n'; // } vector<int> res; vector<pair<int, int>> group[M]; for (int i = 0; i < N; i++) if (i != centroid) group[type[i]].emplace_back(depth[i], i); for (int i = 0; i < M; i++) sort(group[i].begin(), group[i].end()); for (int turn = N - 1, f = -1; turn --; ) { int p = -1, c = -1; for (int i = 0; i < M; i++) { if (i != f && (int) group[i].size() > c) p = i, c = group[i].size(); } assert(c > 0); res.push_back(group[p].back().second); group[p].pop_back(), f = p; } res.push_back(centroid); return res; }
#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...