机器寄了?
查看原帖
机器寄了?
480934
xqqQwQ_楼主2022/7/14 16:24

一直都听说是本机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取消注释读入第二组数据点,它就寄了

2022/7/14 16:24
加载中...