比赛 2026.3.14 评测结果 AAAAAAAAAAEEEEEEEEEE
题目名称 The Chase 最终得分 50
用户昵称 终焉折枝 运行时间 7.781 s
代码语言 C++ 内存使用 3.94 MiB
提交时间 2026-03-14 11:15:22
显示代码纯文本
#include<iostream>
#include<vector>
#include<bitset>
#include<algorithm>
using namespace std;

#define ciallo(x) cerr << x << ' '
#define Ciallo(x) cerr << x << '\n'
const int MAXN = 2005;
const int MAXT = MAXN << 1;
int n, ff;
int a[MAXN], s[MAXN];
bitset<MAXT> f[MAXN];

int main(){
	freopen("Chase.in", "r", stdin);
	freopen("Chase.out", "w", stdout);
	cin.tie(0) -> ios::sync_with_stdio(0);
	cin >> n >> ff;
	for(int i = 1;i <= n;i ++){
		cin >> a[i];
	}
	for(int i = 0;i < ff;i ++){
		cin >> s[i];
		int now = s[i];
		for(int t = 0;t <= 2 * n;t ++){
			f[now].set(t);
//			ciallo(now);
			now = a[now];
		}
	}
	for(int b = 1;b <= n;b ++){
		int fi = -1;
		for(int t = 0;t <= 2 * n;t ++){
			if(f[b][t]){
				fi = t;
				break;
			}
		}
		if(fi == -1){
			cout << -2 << '\n';
			continue;
		}
		if(fi == 0){
			cout << -1 << '\n';
			continue;
		}
		bitset<MAXT> stp;
		int now = b;
		for(int s = 0;s <= 2 * n;s ++){
			stp |= (f[now] >> s);
			now = a[now];
		}
		int ans = -1;
		for(int k = fi - 1;k >= 0;k --){
			if(!stp[k]){
				ans = k;
				break;
			}
		}
		cout << ans << '\n';
	}
	return 0;
}