# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1269318 | 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]) {
auto z = dfs(v, u);
z.first++;
res = max(res, z);
}
return p;
}
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(0).second;
}
int res = 0;
if (i < N-2) goto NOTHING;
if (i == N-2) res = X;
else {
res = i == nX ? Y + N : Y;
}
NOTHING:
X = nX, Y = nY;
return res;
}
pair<int,int> longest_path(std::vector<int> S) {
int n = S.size();
int u = S[n-2];
int v = S[n-2];
if (v >= n) {
u = v - n;
v = n-1;
}
return {u, v};
}