Submission #1321747

#TimeUsernameProblemLanguageResultExecution timeMemory
1321747benjaminkleyn이주 (IOI25_migrations)C++20
0 / 100
30 ms1192 KiB
#include "migrations.h" #include <bits/stdc++.h> using namespace std; int n; int P[10000]; vector<int> g[10000]; int dist[10000] = {0}; void dfs(int u, int p = -1) { if (p == -1) dist[u] = 0; for (int v : g[u]) if (v != p) { dist[v] = dist[u] + 1; dfs(v, u); } } int prev_a, prev_b; int a, b; void find_diameter() { prev_a = a; prev_b = b; a = b = 0; dfs(0); for (int i = 0; i < n; i++) if (dist[i] > dist[a]) a = i; // dfs(a); // for (int i = 0; i < n; i++) // if (dist[i] > dist[b]) // b = i; } bool cancelled = false; int send_message(int N, int i, int Pi) { n = N; g[i].push_back(Pi); g[Pi].push_back(i); if (i == N - 7) find_diameter(); if (i >= N - 7) { if (cancelled) { return 1; } find_diameter(); if (a != prev_a) { cancelled = true; return 0; } int shift_amount = 2 * (N - 1 - i); return ((a >> shift_amount) & 0b11) + 1; } return 0; } pair<int, int> longest_path(vector<int> S) { int N = S.size(); int res = 0; for (int i = N - 1; i >= N - 7 && i > 0; i--) { if (S[i] == 0) return {0, i}; int shift_amount = 2 * (N - 1 - i); res |= (S[i] - 1) << shift_amount; } return {0, res}; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...