Submission #371609

#TimeUsernameProblemLanguageResultExecution timeMemory
371609RyoPhamAirline Route Map (JOI18_airline)C++14
37 / 100
817 ms35236 KiB
#include <bits/stdc++.h> #include "Alicelib.h" using namespace std; #define sz(x) (int)x.size() #define fi first #define se second typedef long long lli; typedef pair<int, int> pii; void Alice(int N, int M, int A[], int B[]) { const int logn = 10; if(N < 3) { InitG(N, M); if(M == 1) MakeG(0, 0, 1); return; } vector<pii> edges; for(int i = 0; i < M; ++i) { ++A[i]; ++B[i]; edges.push_back(pii(A[i], B[i])); } for(int i = 1; i <= N; ++i) { edges.push_back(pii(i, N + logn + 1)); for(int j = 0; j < logn; ++j) if(i >> j & 1) edges.push_back(pii(i, N + j + 1)); } for(int j = 1; j < logn; ++j) edges.push_back(pii(N + j, N + j + 1)); edges.push_back(pii(N + logn + 1, N + logn + 2)); InitG(N + logn + 2, sz(edges)); for(int i = 0; i < sz(edges); ++i) MakeG(i, edges[i].fi - 1, edges[i].se - 1); }
#include <bits/stdc++.h> #include "Boblib.h" using namespace std; #define sz(x) (int)x.size() #define fi first #define se second typedef long long lli; typedef pair<int, int> pii; const int maxn = 1505; vector<int> gr[maxn]; bool origin[maxn], ok[maxn]; int mask[maxn]; void Bob(int V, int U, int C[], int D[]) { const int logn = 10; if(V < 3) { InitMap(V, U); if(U == 1) MakeMap(0, 1); return; } int N = V - logn - 2; vector<int> one_deg_vertices; for(int i = 0; i < U; ++i) { ++C[i]; ++D[i]; gr[C[i]].push_back(D[i]); gr[D[i]].push_back(C[i]); } for(int i = 1; i <= V; ++i) if(sz(gr[i]) == 1) one_deg_vertices.push_back(i); assert(sz(one_deg_vertices) <= 2); int id_bit_10th = -1, min_deg = maxn; if(sz(one_deg_vertices) == 1) { int u = one_deg_vertices.back(); u = gr[u].back(); for(auto&v: gr[u]) origin[v] = true; origin[u] = origin[one_deg_vertices.back()] = false; for(int i = 1; i <= V; ++i) if(!origin[i] && i != u && min_deg > sz(gr[i])) { min_deg = sz(gr[i]); id_bit_10th = i; } } else { int u = one_deg_vertices.back(); u = gr[u].back(); if(sz(gr[u]) != N + 1) swap(one_deg_vertices[0], one_deg_vertices[1]); id_bit_10th = one_deg_vertices[0]; u = one_deg_vertices[1]; u = gr[u].back(); for(auto&v: gr[u]) origin[v] = true; origin[u] = origin[one_deg_vertices[1]] = false; } for(int i = logn - 1, j = id_bit_10th; i >= 0; --i) { int nj = -1; for(auto&k: gr[j]) { if(origin[k]) mask[k] ^= (1 << i); else if(!ok[k]) { assert(nj == -1); nj = k; } } ok[j] = true; j = nj; if(i > 0) assert(j != -1); } vector<pii> edges; for(int i = 0; i < U; ++i) if(origin[C[i]] && origin[D[i]]) edges.push_back(pii(mask[C[i]] - 1, mask[D[i]] - 1)); int M = sz(edges); InitMap(N, M); for(auto&e: edges) MakeMap(e.fi, e.se); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...