#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... |