Submission #1270790

#TimeUsernameProblemLanguageResultExecution timeMemory
1270790tvgkAirline Route Map (JOI18_airline)C++20
100 / 100
158 ms31144 KiB
#include "Alicelib.h" #include <cassert> #include <cstdio> #include<bits/stdc++.h> using namespace std; #define task "a" #define se second #define fi first #define ll long long #define ii pair<ll, ll> const long mxN = 1e3 + 20; vector<ii> ed; void Alice(int n, int m, int a[], int b[]) { for (int i = 0; i < m; i++) ed.push_back({a[i], b[i]}); for (int j = 0; j < 10; j++) { for (int i = 0; i < n; i++) { if ((i >> j) & 1) ed.push_back({i, n + j}); } ed.push_back({n + j, n + 10}); if (j) ed.push_back({n + j, n + j - 1}); } for (int i = 0; i < n + 10; i++) ed.push_back({n + 11, i}); InitG(n + 12, ed.size()); m = 0; for (ii i : ed) MakeG(m++, i.fi, i.se); }
#include "Boblib.h" #include <algorithm> #include <vector> #include <cassert> using namespace std; namespace { vector<int> graph[2000]; bool mark[2000]; int id[2000]; } void Bob(int V, int U, int C[], int D[]) { for (int i = 0; i < U; ++i) { graph[C[i]].push_back(D[i]); graph[D[i]].push_back(C[i]); } pair<int, int> mxdeg{ -1, -1 }; for (int i = 0; i < V; ++i) mxdeg = max(mxdeg, { graph[i].size(), i }); int s = mxdeg.second; int w = V * (V - 1) / 2 - s; for (int u : graph[s]) w -= u; for (int i = 0; i < V; ++i) mark[i] = false; for (int u : graph[w]) mark[u] = true; vector<int> marker; int p = -1, ori = -1; for (int i = 0; i < V; ++i) if (mark[i]) { int d = 0, nx = 0; for (int j : graph[i]) if (mark[j]) { ++d; nx = j; } if (d == 1) { p = nx; ori = i; break; } } assert(p != -1); marker.push_back(ori); for (;;) { marker.push_back(p); bool found = false; for (int q : graph[p]) if (mark[q] && q != ori) { ori = p; p = q; found = true; break; } if (!found) break; } if (graph[marker[0]].size() < graph[marker[marker.size() - 1]].size()) { reverse(marker.begin(), marker.end()); } for (int i = 0; i < V; ++i) id[i] = 0; for (int i = 0; i < marker.size(); ++i) { for (int j : graph[marker[i]]) { id[j] |= 1 << i; } } mark[s] = mark[w] = true; vector<pair<int, int> > ans; for (int i = 0; i < V; ++i) if (!mark[i]) { for (int j : graph[i]) if (i < j && !mark[j]) { ans.push_back({ id[i], id[j] }); } } InitMap(V - 12, ans.size()); for (auto e : ans) MakeMap(e.first, e.second); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...