20分求助1!
查看原帖
20分求助1!
231965
Yellow_Lemon_Tree楼主2020/7/22 20:34

为什么会memory limit error?

错误链接

代码:

#include<cstdio>
using namespace std;
int ans=0;
int f[300005],n,k;
inline int read()
{
	int x=0;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
    	ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+int(ch-'0');
		ch=getchar();
	}
	return x;
}
int find(int a)
{
    if(a==f[a]) return a;
    return f[a]=find(f[a]);
}
int unite(int x,int y)
{
	int r1=f[x],r2=f[y];
	f[r1]=r2;
}
int main()
{
	int x,y,t;
	n=read();k=read();
	for(int i=1;i<=n*3;++i) f[i]=i;
	for(int i=1;i<=k;++i)
	{
		t=read();x=read();y=read();
		if(x>n||y>n)
		{
			ans++;
			continue;
		}
		 if(t==1)
		{
			if(find(x+n)==find(y)||find(x+n*2)==find(y)){
				ans++;
				continue;
			}
			unite(x,y);
			unite(x+n,y+n);
			unite(x+n*2,y+n*2);
		}
		else if(t==2)
		{
			if(x==y) 
			{
				ans++;
				continue;
			 } 
			if(find(x)==find(y)||find(x+n*2)==find(y))
			{
				ans++;
				continue;
			}
			unite(x,y+n*2);
			unite(x+n,y);
			unite(x+n*2,y*2);
		}
	}
	printf("%d\n",ans);
	return 0;
}

希望有大佬能指出我的错误!

2020/7/22 20:34
加载中...