# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
41554 | Pajaraja | Birthday gift (IZhO18_treearray) | C++14 | 1479 ms | 262144 KiB |
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 <bits/stdc++.h>
#define MAXN 200007
#define MAXL 22
using namespace std;
vector<int> g[MAXN];
multiset<int> k[MAXN],km[MAXN];
multiset<int>::iterator it;
int p[MAXL][MAXN],a[MAXN],b[MAXN],in[MAXN],out[MAXN],n,cnt;
void dfs(int s,int f)
{
p[0][s]=f;
in[s]=cnt++;
for(int i=0;i<g[s].size();i++) if(g[s][i]!=f) dfs(g[s][i],s);
out[s]=cnt++;
}
bool insub(int x,int y) {return ((in[x]<=in[y])&&(out[x]>=out[y]));}
void lcainit()
{
dfs(1,0);
in[0]=-1;
out[0]=2*MAXN;
for(int i=1;i<MAXL;i++) for(int j=1;j<=n;j++) p[i][j]=p[i-1][p[i-1][j]];
}
int lca(int x,int y)
{
if(insub(x,y)) return x;
if(insub(y,x)) return y;
for(int i=MAXL-1;i>=0;i--) if(!insub(p[i][x],y)) x=p[i][x];
return p[0][x];
}
Compilation message (stderr)
# | 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... |