一直都听说是本机AC提交RE
怎么我本地RE提交AC
有没有大佬帮忙看看
#include<bits/stdc++.h>
#define MAXN 10000001
using namespace std;
stack<int> s;
int dfn[MAXN],low[MAXN],be[MAXN];
int pre[MAXN],head[MAXN],ver[MAXN],vis[MAXN];
int cnt=0,n,cur=0,tot=0;
int minans=99999999;
void add_edge(int u,int v)
{
pre[++cnt]=head[u];
head[u]=cnt;
ver[cnt]=v;
return;
}
void tarjan(int nown)
{
// cout<<nown<<endl;
if(vis[nown]) return;
dfn[nown]=low[nown]=++cur;
s.push(nown);
vis[nown]=1;
for(int i=head[nown];i;i=pre[i])
{
if(!vis[ver[i]])
{
tarjan(ver[i]);
low[nown]=min(low[nown],low[ver[i]]);
}
else low[nown]=min(low[nown],dfn[ver[i]]);
}
if(dfn[nown]==low[nown])
{
int tmp=0,ans=0;
while(tmp!=nown)
{
tmp=s.top();
s.pop();
vis[tmp]=1;
ans++;
}
if(ans!=1) minans=min(ans,minans);
}
return;
}
void tar()
{
for(int i=1;i<=n;i++) tarjan(i);
return;
}
int main()
{
//freopen("P2661_2.in","r",stdin);
cin>>n;
for(int i=1;i<=n;i++)
{
int k;
cin>>k;
add_edge(i,k);
}
tar();
cout<<minans<<endl;
return 0;
}
样例没事,但如果把freopen取消注释读入第二组数据点,它就寄了