https://www.luogu.com.cn/record/163062879
为什么会这样呀
提示是
Nothing is compiled: OUTPUT exceeds.
代码如下:
#include <bits/stdc++.h>
using namespace std;
namespace io {
inline int read() {
int __x=0,__f=1;
char __c=getchar();
while(__c<'0'||__c>'9') {
if(__c=='-')__f=-1;
__c=getchar();
}
while(__c>='0'&&__c<='9') {
__x=__x*10+__c-'0';
__c=getchar();
}
return __x*__f;
}
char __F[200];
inline void write(int __x) {
if(__x==0) {
putchar('0');
return;
}
int __tmp,__cnt=0;
if(__x>0) {
__tmp=__x;
} else {
__tmp=-__x;
}
if(__x<0) {
putchar('-');
}
while(__tmp>0) {
__F[__cnt++]=__tmp%10+'0';
__tmp/=10;
}
while(__cnt>0) {
putchar(__F[--__cnt]);
}
}
}
using namespace io;
const int MAXN = 5000005;
int n, m, f[MAXN], k, d[MAXN], maxd[MAXN], ans[MAXN] = {0, 1}, done = 1;
vector<int> g[MAXN];
void dfs(int u)
{
maxd[u] = d[u];
for (auto v : g[u]) {
d[v] = d[u] + 1;
dfs(v);
maxd[u] = max(maxd[u], maxd[v]);
}
}
void go(int u)
{
if (g[u].size() == 0) {
if (d[u] > done) {
ans[d[u]] = u;
}
} else if (g[u].size() == 1) {
if (d[u] > done) {
ans[d[u]] = u;
done = u;
}
go(g[u][0]);
} else {
int m1 = 0, m2 = 0;
for (auto v : g[u]) {
if (m1 == 0) {
m1 = v;
} else if (m2 == 0) {
if (maxd[v] > maxd[m1]) {
m2 = m1;
m1 = v;
} else {
m2 = v;
}
} else if (maxd[v] >= maxd[m1]) {
m2 = m1;
m1 = v;
} else if (maxd[v] > maxd[m2]) {
m2 = v;
}
}
for (int i = done + 1; i <= maxd[m2]; i++) {
ans[i] = u;
}
done = maxd[m2];
if (maxd[m1] > maxd[m2]) {
go(m1);
}
}
}
int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);
// cout.tie(0);
n = read(); m = read();
for (int i = 1; i <= n; i++) {
f[i] = read();
g[f[i]].push_back(i);
}
d[1] = 1;
dfs(1);
go(1);
while (m--) {
k = read();
write(ans[k]);
puts("");
}
return 0;
}