UKE求助
查看原帖
UKE求助
967367
dingjingyi楼主2023/7/6 09:14
#include<bits/stdc++.h>
using namespace std;
int n,dis1[2100005],dis2[200005],a[200005];
struct pi{
	int id,step;
};
vector<int>nbr[200005];
void bfs(int dis[],int val){
	queue<pi>q;
	for(int i=1;i<=n;i++){
		if(a[i]%2==val){
			dis[i]=0;
			q.push((pi){i,0});
		}
        else dis[i]=-1;
	}
	while(q.empty()==false){
		int cur=q.front().id;
		int step=q.front().step;
		q.pop();
		for(int i=0;i<nbr[cur].size();i++){
			int nx=nbr[cur][i];
			if(dis[nx]==-1){
				dis[nx]=step+1;
				pi nxt={nx,step+1};
				q.push(nxt);
			}
		}
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		if(i-a[i]>=1) nbr[i-a[i]].push_back(i);
		if(i+a[i]<=n) nbr[i+a[i]].push_back(i);
	}
	bfs(dis1,1);
    bfs(dis2,0);
	for(int i=1;i<=n;i++){
		if(a[i]%2==1) cout<<dis2[i]<<" ";
		else cout<<dis1[i]<<" ";
	}
	return 0;
}

2023/7/6 09:14
加载中...