Submission #1257764

#TimeUsernameProblemLanguageResultExecution timeMemory
1257764biankMigrations (IOI25_migrations)C++20
30 / 100
30 ms1000 KiB
#include "migrations.h" #include <bits/stdc++.h> using namespace std; #define forsn(i, s, n) for (int i = int(s); i < int(n); i++) #define forn(i, n) forsn(i, 0, n) #define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--) #define dforn(i, n) dforsn(i, 0, n) using vi = vector<int>; using ll = long long; using ii = pair<int, int>; #define fst first #define snd second #define sz(x) int(x.size()) #define all(x) begin(x), end(x) #define pb push_back #define eb emplace_back const int N = 10000; const int K = 14; const int B = 7; int up[K][N], depth[N]; int lca(int u, int v) { if (depth[u] < depth[v]) swap(u, v); int diff = depth[u] - depth[v]; forn(i, K) if (diff >> i & 1) u = up[i][u]; if (u == v) return u; dforn(i, K) if (up[i][u] != up[i][v]) { u = up[i][u], v = up[i][v]; } assert(up[0][u] == up[0][v]); return u; } int dist(int u, int v) { return depth[u] + depth[v] - 2 * depth[lca(u, v)]; } int u, v; int send_message(int /*N*/, int i, int Pi) { if (i == 1) { depth[0] = 0; forn(i, K) up[i][0] = 0; u = 0, v = 0; } up[0][i] = Pi, depth[i] = depth[Pi] + 1; forn(j, K - 1) up[j + 1][i] = up[j][up[j][i]]; int state = 0; if (dist(i, v) > dist(u, v)) u = i, state = 1; else if (dist(i, u) > dist(u, v)) v = i, state = 2; if (i >= N - K) { if (state == 2) return 4; int digit = v >> (i - (N - K)) & 1; return 2 * state + digit; } if (i >= N - K - B) { if (state == 1) return 4; return u >> (2 * (i - (N - K - B))) & 3; } return 0; } ii longest_path(vi S) { int U = 0, V = 0; int lastU = -1, lastV = -1; forsn(i, N - K - B, N - K) { if (S[i] == 4) lastU = i; else U += S[i] << (2 * (i - (N - K - B))); } forsn(i, N - K, N) { if (S[i] == 4) lastV = i; else { if (S[i] >= 2) lastU = i; V += (S[i] & 1) << (i - (N - K)); } } if (lastU != -1) U = lastU; if (lastV != -1) V = lastV; return {U, V}; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...