WA | 求 hack
查看原帖
WA | 求 hack
552286
流光萤影楼主2025/6/30 18:12

WA on #5 #6 #17 #18 #29 #41 #42

#include<bits/stdc++.h>
using namespace std;
int n,q,fa[100005],son[100005],mp[100005],cnt[100005];
vector<int> bridge[100005],Q[100005];
void dfs(int now)
{
	if(!son[now])
	{
		mp[now] = now;
		return;
	}
	for(int to:bridge[now]) dfs(to);
	mp[now] = mp[son[now]];
	return; 
}
int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin >> n >> q;
	for(int i(2);i <= n;++i)
	{
		cin >> fa[i];
		if(!son[fa[i]]) son[fa[i]] = i;
		bridge[fa[i]].emplace_back(i);
	}
	dfs(1);
	for(int i(1);i <= n;++i) ++cnt[mp[i]];
	for(int i(1);i <= n;++i)
	{
		if(!son[i] && cnt[i] > 1)
		{
			for(int now(i);now;now = fa[now]) Q[i].emplace_back(now);
			reverse(Q[i].begin(),Q[i].end());
		}
	}
	Q[0].emplace_back(1);
	for(int s,k,a,now;q;--q)
	{
		cin >> s >> k;
		bool flag(0);
		if(cnt[mp[s]] == 1)
		{
			flag = 1;
			for(;k;--k)
			{
				cin >> a;
				if(a > 0)
				{
					s = fa[s];
					--a;
					now = lower_bound(Q[mp[s]].begin(),Q[mp[s]].end(),s)-Q[mp[s]].begin();
					now += -a;
					now = min(now,int(Q[mp[s]].size())-1);
					now = max(now,0);
					s = Q[mp[s]][now];
					--k;
					flag = 0;
					break;
				}
			}
			
		}
		else now = lower_bound(Q[mp[s]].begin(),Q[mp[s]].end(),s)-Q[mp[s]].begin();
		if(flag)
		{
			cout << s << "\n";
			continue;
		}
		for(;k;--k)
		{
			cin >> a;
			now += -a;
			now = min(now,int(Q[mp[s]].size())-1);
			now = max(now,0);
			s = Q[mp[s]][now];
		}
		cout << s << "\n";
	}
}
2025/6/30 18:12
加载中...