# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1269321 | sula2 | 이주 (IOI25_migrations) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
vector<int> adj[10000];
int X = 0, Y = 0;
pair<int,int> dfs(int u, int p = -1) {
pair<int,int> res = {0, u};
for (int v : adj[u]) {
if (v == p) continue;
auto z = dfs(v, u);
z.first++;
res = max(res, z);
}
return res;
}
int send_message(int N, int i, int Pi) {
adj[i].push_back(Pi);
adj[Pi].push_back(i);
int nX = 0, nY = 0;
if (i >= N-3) {
nX = dfs(0).second;
nY = dfs(nX).second;
if (nX > nY) swap(nX, nY);
if (nX == Y) swap(nX, nY);
x = nX, y = nY;
}
int res = 0;
if (i == N-2) res = nX;
else if (i == N-1) res = i == nX ? nY + N : nY;
return res;
}
pair<int,int> longest_path(vector<int> S) {
int n = S.size();
int u = S[n-2];
int v = S[n-1];
if (v >= n) {
u = v - n;
v = n-1;
}
return {u, v};
}