This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "Anyalib.h"
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define fi first
#define se second
namespace{
    const int maxn = 505;
    int n;
    vector<int> ver;
    vector<pii> edge[maxn];
    int dep[maxn],pid[maxn],ind[maxn],cnt[maxn],par[maxn];
}
void InitAnya(int N, int A[] , int B[]) {
    n=N;ver.clear();
    for(int i=0;i<N;i++) edge[i].clear();
    for(int i=0;i<N-1;i++){
        edge[A[i]].push_back({B[i],i});
        edge[B[i]].push_back({A[i],i});
    }
    function<int(int,int)> dfs = [&](int u,int p){
        for(auto [v,id]:edge[u]) if(v!=p){
            pid[v]=id;par[v]=u;
            dep[u]=max(dep[u],(dfs(v,u)+1)%10);
        }
        //cout << u << ' ' << dep[u] << ' ' << par[u] << ' ' << pid[u] << '\n';
        if(dep[u]==9){
            ind[u]=(int)ver.size();
            ver.push_back(u);
        }
        return dep[u];
    };
    par[0]=-1;
    dfs(0,-1);
}
void Anya(int C[]) {
    cnt[0]=0;
    for(int i=1;i<n;i++) Save(i,C[pid[i]]);
    function<void(int,int)> dfs = [&](int u,int p){
        for(auto [v,id]:edge[u]) if(v!=p){
            cnt[v]=cnt[u]+C[id];
            dfs(v,u);
        }
    };
    dfs(0,0);
    for(int i=0;i<(int)ver.size();i++){
        for(int j=0;j<9;j++) Save(n+9*i+j,cnt[ver[i]]>>j&1);
    }
}
#include "Borislib.h"
#include<bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define fi first
#define se second
namespace{
    const int maxn = 505;
    int n;
    vector<int> ver;
    vector<pii> edge[maxn];
    int dep[maxn],pid[maxn],ind[maxn],par[maxn];
}
void InitBoris(int N, int A[] , int B[]) {
    n=N;ver.clear();
    for(int i=0;i<N;i++) edge[i].clear();
    for(int i=0;i<N-1;i++){
        edge[A[i]].push_back({B[i],i});
        edge[B[i]].push_back({A[i],i});
    }
    function<int(int,int)> dfs = [&](int u,int p){
        for(auto [v,id]:edge[u]) if(v!=p){
            pid[v]=id;par[v]=u;
            dep[u]=max(dep[u],(dfs(v,u)+1)%10);
        }
        if(dep[u]==9){
            ind[u]=(int)ver.size();
            ver.push_back(u);
        }
        return dep[u];
    };
    par[0]=-1;
    dfs(0,-1);
}
int Boris(int u){
    int cnt=0;
    while(u!=-1 && dep[u]!=9){
        cnt+=Ask(u);
        u=par[u];
    }
    if(u!=-1){
        int x=ind[u];
        for(int i=0;i<9;i++) cnt+=Ask(n+9*x+i)<<i;
    }
    return cnt;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |