比赛 2026.3.14 评测结果 AWWWWWWWWWEEEEEEEEEE
题目名称 The Chase 最终得分 5
用户昵称 彭欣越 运行时间 2.176 s
代码语言 C++ 内存使用 4.71 MiB
提交时间 2026-03-14 12:58:02
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100010;
int n,m,a[N],b[N],mk[N],dis[N],flag;
int head[N],tot;
struct edge {
	int v,nxt;
}e[N*2];
void add (int u,int v) {
	e[++tot].v=v;
	e[tot].nxt=head[u];
	head[u]=tot;
}
queue<int>q;
void bfs (int u) {
	memset(mk,0,sizeof(mk));
	memset(dis,0,sizeof(dis));
	q.push(u);
	while (!q.empty()) {
		int u=q.front();
		q.pop();
		if (mk[u]) {
			flag=1;
			continue;
		}
		mk[u]=1;
		for (int i=head[u];i;i=e[i].nxt) {
			int v=e[i].v;
			if (mk[v]) {
				flag=1;
				continue;
			}else{
				dis[v]=dis[u]+1;
				mk[v]=1;
				q.push(v);
			}
		}
	}
}
int main () {
	freopen("Chase.in","r",stdin);
	freopen("Chase.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin >> n >> m;
	for (int i=1;i<=n;i++) {
		cin >> a[i];
		add(i,a[i]);
	}
	for (int i=1;i<=m;i++) {
		int x;
		cin >> x;
		b[x]=1;
	}
	for (int i=1;i<=n;i++) {
		flag=0;
		if (b[i]) {
			cout << -1 <<endl;
			continue;
		}
		bfs(i);
		if (flag) {
			int ans=1e9;
			for (int i=1;i<=n;i++) {
				if (b[i]) {
					if (dis[i]==0) continue;
					ans=min(ans,dis[i]);
				}
			}
			if (ans==1e9) cout << -2 <<endl;
			else cout << ans-1 <<endl;
		}else{
			cout << -1 <<endl;
		}
	}
	return 0;
}