TLE on #2,#10,求优化qwq
查看原帖
TLE on #2,#10,求优化qwq
1330605
zyx110824楼主2024/9/10 22:04
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=200005,maxe=200005;
int n,tot,son[maxe],nxt[maxe],lnk[maxn],ans=1<<30;
bitset <maxn> vis,v;
unordered_map <int,int> pre;
struct ZYX{int x,s;}que[maxn];
int read(){
	int ret=0,f=1;
	char c=getchar();
	while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}
	while(isdigit(c)){ret=ret*10+c-'0';c=getchar();}
	return ret*f;
}
void add_e(int x,int y){son[++tot]=y,nxt[tot]=lnk[x],lnk[x]=tot;}
void work(int x){
	int now=x;
	while(!v[now])v[now]=1,now=pre[now];
}
void BFS(int pos){
	int hed=0,til=1;vis=0;pre.clear();
	que[1]=(ZYX){pos,0};
	while(hed!=til){
		hed=(hed+1)%maxn;
		for(int j=lnk[que[hed].x];j;j=nxt[j]){
			if(vis[son[j]])continue;vis[son[j]]=1;pre[son[j]]=que[hed].x;
			til=(til+1)%maxn;que[til]=(ZYX){son[j],que[hed].s+1};
			if(que[til].x==pos){work(pos);ans=min(ans,que[til].s);return;}
		}
	}
	work(pos);
}
signed main(){
	n=read();
	for(int i=1;i<=n;i++)add_e(i,read());
	for(int i=1;i<=n;i++){
		if(!v[i])BFS(i);
	}
	printf("%lld\n",ans);
	return 0;
}
2024/9/10 22:04
加载中...