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;
}
很不理解,希望有大佬解我疑惑