P2661求调(悬赏1关注)
  • 板块灌水区
  • 楼主Martlet
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/8/24 15:24
  • 上次更新2023/11/3 01:31:02
查看原帖
P2661求调(悬赏1关注)
543717
Martlet楼主2023/8/24 15:24

题目链接

#include<bits/stdc++.h>
using namespace std;
const int maxn = 200000+10;
vector<int> g[maxn];
int vis[maxn];
int cn;
int res[maxn],ti[maxn];
void dfs(int p,int t){
	if(vis[p] == 0){
		ti[p] = t;
	    vis[p] = 1;
	    if(vis[g[p][0]] != -1)dfs(g[p][0],t+1);
	    vis[p] = -1;
	    return;
	}
    else if(vis[p] == 1){
    	res[++cn] = t-ti[p];
    	vis[p] = -1;
    	return;
	}
	else if(vis[p] == -1){
		
		return ;
	}
	
}
int main(){
	int n;
	cin>>n;
	for(int i = 1;i <= n;i++){
		int x;
		cin>>x;
		g[i].push_back(x);
	}
	for(int i = 1;i <= n;i++){
		if(vis[i] != -1)dfs(i,0);
	}
	int ans = 1e9;
	for(int i = 1;i <= cn;i++){
	    ans = min(ans,res[cn]);
	}
	cout<<ans;
	return 0;
}
2023/8/24 15:24
加载中...