求助 dfs
查看原帖
求助 dfs
674247
seanlsy楼主2022/6/13 19:46

WA on #10

#include <bits/stdc++.h>
using namespace std;
inline int read(){
	int x=0;bool f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=0;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return f?x:-x;
}
int d[200005],a[200005],n;
bool vis[200005];//防止死循环
int dfs(int x){
	if(d[x]^(1<<25)) return d[x];
	if(x+a[x]<=n)
		if((a[x]^a[x+a[x]])&1) return d[x]=1;//判断奇偶
		else if(!vis[x]) vis[x]=1,d[x]=min(d[x],dfs(x+a[x])+1),vis[x]=0;
	if(x>a[x])
		if((a[x]^a[x-a[x]])&1) return d[x]=1;
		else if(!vis[x]) vis[x]=1,d[x]=min(d[x],dfs(x-a[x])+1),vis[x]=0;
	return d[x];
}
int main(){
	n=read();
	for(int i=1;i<=n;i++) a[i]=read(),d[i]=(1<<25);
	for(int i=1;i<=n;i++) printf("%d ",(dfs(i)^(1<<25))?d[i]:-1);
	return 0;
}
2022/6/13 19:46
加载中...