Submission #1254770

#TimeUsernameProblemLanguageResultExecution timeMemory
1254770nicolo_010Migrations (IOI25_migrations)C++20
30 / 100
32 ms1208 KiB
#include "migrations.h"
#include <bits/stdc++.h>
using namespace std;
template <typename T>
using v = vector<T>;
using ll = long long;
using pii = pair<int, int>;
#define rep(i, k, n) for (int i = k; i < n; i++)

v<v<int>> adj;
int ans;
int mx;
int L;

void dfs(int n, int d=0, int p=-1) {
  if (d > mx) {
    mx = d;
    ans = n;
  }
  for (auto x : adj[n]) {
    if (x == p) continue;
    dfs(x, d+1, n);
  }
}

int send_message(int N, int i, int Pi) {
  if (i == 1) {
    adj.resize(N);
  }
  adj[i].push_back(Pi);
  adj[Pi].push_back(i);
  if (i == N-14) {
    mx = 0;
    dfs(0);
    L = ans;
    return (L&1);
  }
  else if (i >= N-13) {
    mx = 0;
    dfs(0);
    if (L != ans) {
      L = ans;
      return 4;
    }
    else {
      int b = i-(N-14); //
      int k = L;
      rep(i, 0, b) {
        k /= 2;
      }
      return (1&k);
    }
  }
  else return 0;
}

std::pair<int, int> longest_path(std::vector<int> S) {
  int N = S.size();
  int last4 = -1;
  int anss = 0;
  int b = 0;
  for (int i = N-14; i < N; i++) {
    if (S[i] == 4) last4 = i;
    else {
      if (S[i]) {
        anss += (1 << b);
      }
    }
    b++; 
  }
  if (last4 != -1) return {0, last4};
  else return {0, anss};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...