| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1287233 | kawhiet | 이주 (IOI25_migrations) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include "migrations.h"
using namespace std;
vector<int> g[10001];
vector<int> d;
vector<bool> vis;
void dfs(int u) {
vis[u] = 1;
for (auto v : g[u]) {
if (!vis[v]) {
d[v] = d[u] + 1;
dfs(v);
}
}
}
pair<int, int> get(int N) {
d.assign(N, 0);
vis.assign(N, false);
dfs(0);
int u = d.size() - 1 - (max_element(d.rbegin(), d.rend()) - d.rbegin());
d.assign(N, 0);
vis.assign(N, false);
dfs(u);
int v = d.size() - 1 - (max_element(d.rbegin(), d.rend()) - d.rbegin());
return {u, v};
}
int send_message(int N, int i, int Pi) {
g[i].push_back(Pi);
g[Pi].push_back(i);
int d = 0;
if (i == N - 2) {
auto [u, v] = get(N);
if (u != 0) {
d = u;
return u;
} else {
d = v;
return v;
}
}
if (i == N - 1) {
auto [u, v] = get(N);
if (u != 0) return (d == u ? 0 : u - d);
else return (d == v ? 0 : v - d);
}
return 0;
}
