为什么我改成vector就过了
  • 板块灌水区
  • 楼主Martlet
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/8/24 16:01
  • 上次更新2023/11/3 01:30:19
查看原帖
为什么我改成vector就过了
543717
Martlet楼主2023/8/24 16:01

P2661为什么我改成vector就过了。

80pt

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2000000+10;
int g[maxn];
int vis[maxn];
int cn;
int res[maxn],ti[maxn];
int mmin = 1e9;
void dfs(int p,int t){
	if(vis[p] == -1){
		return ;
	}
	if(vis[p] == 1){
		cn++;
        res[cn] = t-ti[p];
    	vis[p] = -1;
    	return;
	}
	if(vis[p] == 0){
		ti[p] = t;
	    vis[p] = 1;
	    dfs(g[p],t+1);
	    vis[p] = -1;
	    return;
	}
   
	
}
int main(){
	int n;
	cin>>n;
	for(int i = 1;i <= n;i++){
		int x;
		cin>>x;
		g[i] = x;
	}
	for(int i = 1;i <= n;i++){
		if(vis[i] == 0)dfs(i,0);
	}
	int ans = 2e9;
	for(int i = 1;i <= cn;i++){
	    ans = min(ans,res[cn]);
	}
	cout<<ans;
	
	return 0;
}

100pt

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2000000+10;
int g[maxn];
int vis[maxn];
int cn;
vector<int>a;
int res[maxn],ti[maxn];
int mmin = 1e9;
void dfs(int p,int t){
	if(vis[p] == -1){
		return ;
	}
	if(vis[p] == 1){
		cn++;
        a.push_back(t-ti[p]);
    	vis[p] = -1;
    	return;
	}
	if(vis[p] == 0){
		ti[p] = t;
	    vis[p] = 1;
	    dfs(g[p],t+1);
	    vis[p] = -1;
	    return;
	}
   
	
}
int main(){
	int n;
	cin>>n;
	for(int i = 1;i <= n;i++){
		int x;
		cin>>x;
		g[i] = x;
	}
	for(int i = 1;i <= n;i++){
		if(vis[i] == 0)dfs(i,0);
	}
	for(int i = 0;i < a.size();i++){
		mmin = min(a[i],mmin);
	}
	cout<<mmin;	
	return 0;
}

很不理解,希望有大佬解我疑惑

2023/8/24 16:01
加载中...