#include "migrations.h"
#include <bits/stdc++.h>
#define F first
#define S second
#define lol ios::sync_with_stdio(false);cin.tie(NULL);
typedef long long ll;
typedef long double ld;
using namespace std;
const ll M = 998244353;
int k = 27;
vector<vector<ll>> e;
pair<ll,pair<ll,ll>> diam;
ll ind = 0;
void dfs(ll root, ll d, vector<vector<ll>> &e, vector<bool> &vis, vector<ll> &dis) {
    vis[root] = 1, dis[root] = d;
    for(auto & v : e[root]) if(!vis[v]) dfs(v, d+1, e, vis, dis);
}
pair<ll,ll> findf(ll root, ll n, vector<vector<ll>> &e) {
    vector<bool> vis(n,0); vector<ll> dis(n,-1);
    dfs(root, 0, e, vis, dis);
    pair<ll,ll> ans = {-1,-1};
    for(ll i=0; i<n; i++) ans = max(ans, make_pair(dis[i], i));
    return ans;
}
int send_message(int N, int i, int Pi) {
    if(i == 1) e.push_back(vector<ll>());
    e.push_back(vector<ll>());
    e.back().push_back(Pi);
    e[Pi].push_back(i);
    if(i == N-k) {
        ll v = findf(0, i+1, e).S;
        pair<ll,ll> p = findf(v, i+1, e);
        diam.F = p.F, diam.S.F = v, diam.S.S = p.S;
        ind = diam.S.F*N + diam.S.S;
    }
    if(i > N-k) {
        pair<ll,ll> p1 = findf(diam.S.F, i+1, e);
        pair<ll,ll> p2 = findf(diam.S.S, i+1, e);
        if(p1.F > diam.F) {
            diam.F = p1.F, diam.S.S = i;
            return 2;
        }
        else if(p2.F > diam.F) {
            diam.F = p2.F, diam.S.F = i;
            return 3;
        }
    }
    return ((ind & (1 << (i - (N-k)))) ? 1 : 0);
}
std::pair<int, int> longest_path(std::vector<int> S) {
    int N = 10000;
    ll ind = 0;
    for(int i=N-k; i<N; i++) if(S[i] <= 1) ind += (S[i] << (i - (N-k)));
    pair<int, int> ans = make_pair(ind / N, ind % N);
    for(int i=N-k; i<N; i++) {
        if(S[i-1] == 2) ans.S = i;
        if(S[i-1] == 3) ans.F = i;
    }
    return ans;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |