全wa求助
查看原帖
全wa求助
636008
blackmonkey楼主2023/7/6 21:47

用拓扑优化的

#include <bits/stdc++.h>
using namespace std;
int n,minn=1000000000;
int a[2000001],ind[2000001],vis[2000001];
vector <int> g[2000001];
queue <int> q;
int dfs(int x,int deep){
	if(vis[x]) minn=min(minn,deep-vis[x]);
	else{
		vis[x]=deep;
		for(int i=0;i!=g[x].size();++i) dfs(i,deep+1);
	}
}
void work(){
	cin >> n;
	for(int i=1;i<=n;++i) scanf("%d",&a[i]);
	for(int i=1;i<=n;++i) g[i].push_back(a[i]),++ind[a[i]];
	for(int i=1;i<=n;++i) if(!ind[i]) q.push(i);
	while(!q.empty()){
		int x=q.front();
		q.pop();
		for(int i=0;i!=g[x].size();++i) if(--ind[i]==0) q.push(i);
	}
	for(int i=1;i<=n;++i) if(ind[i] && !vis[i]) dfs(i,1);
	printf("%d",minn);
} 
int main(){work();}

谢谢各大佬,蒟蒻实在太垃了

2023/7/6 21:47
加载中...