代码重复提交,大概率CE,小概率不CE
查看原帖
代码重复提交,大概率CE,小概率不CE
47409
alien_fresh楼主2024/6/26 11:01

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;
}
2024/6/26 11:01
加载中...