#include "Encoder.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 250'000;
static int n, ans[N + 10], len[N + 10];
static int k, x[N + 10], sum[N + 10];
static vector<int> adj[N + 10];
void calcX() {
	for (int i = 1; i <= 30; i++)
		x[i] = i;
	k = 30;
	while (x[k] < (1 << 19)) {
		x[k + 1] = (x[k] * 27) / 26;
		k++;
	}
}
void dfsLen(int u = 1, int par = 0) {
	int t = 1;
	for (auto v: adj[u])
		if (v != par) {
			dfsLen(v, u);
			sum[v] += t;
			t += x[len[v]];
		}
	len[u] = lower_bound(x + 1, x + k + 1, t) - x;
}
void dfsAns(int u = 1, int par = 0, int up = 0) {
	up += sum[u];
	ans[u] = up + 1;
	for (auto v: adj[u])
		if (v != par)
			dfsAns(v, u, up);
}
void writeOutput() {
	for (int i = 1; i <= n; i++) {
		//cout << i - 1 << ": " << ans[i] << ' ' << ans[i] + x[len[i]] - 1 << endl;
		ans[i] = (ans[i] << 9) + x[len[i]];
		Code(i - 1, ans[i]);
	}
}
void Encode(int N, int A[], int B[]) {
	n = N;
	for (int i = 0; i < n - 1; i++) {
		int u = A[i] + 1, v = B[i] + 1;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	calcX();
	dfsLen();
	dfsAns();
	writeOutput();
}
#include "Device.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 1000;
static int k, x[N + 10];
static void calcX() {
	for (int i = 1; i <= 30; i++)
		x[i] = i;
	k = 30;
	while (x[k] < (1 << 19)) {
		x[k + 1] = (x[k] * 27) / 26;
		k++;
	}
}
void InitDevice() {
	calcX();
}
pair<int, int> calcP(long long t) {
	int lenX = x[t & ((1 << 9) - 1)];
	int st = (t >> 9);
	return {st, st + lenX - 1};
}
bool inSub(pair<int, int> u, pair<int, int> v) {
	return u.first <= v.first && v.second <= u.second;
}
int Answer(long long S, long long T) {
	pair<int, int> x = calcP(S);
	pair<int, int> y = calcP(T);
	if (inSub(y, x))
		return 0;
	return inSub(x, y)? 1: 2;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |