爆内存了,求助
查看原帖
爆内存了,求助
127925
Kio_楼主2020/8/18 11:10

RT,1AC,1WA,8MLE

代码如下

#include<cstdio>
#include<vector>
using namespace std;
vector<int> j;
int find(int x)
{
	if(x!=j[x])find(j[x]);
	return j[x];
}
void _union(int x,int y)
{
	j[find(x)]=find(y);
}
int read()
{
	int num=0;
	char c=getchar();
	while(c<'0'||c>'9')c=getchar();
	while('0'<=c&&c<='9')num=num*10+c-'0',c=getchar();
	return num;
}
int n,k,z,x,y,ans;
int main(){
	n=read(),k=read();
	j.push_back(1);
	for(int i=1;i<=n*3;i++)
	{
		j.push_back(i);
	}
	for(int i=1;i<=k;i++)
	{
		z=read(),x=read(),y=read();
		if(x>n||y>n||x==y){
			ans++;
			continue;
		}
		if(z==1){
			if(find(x)==find(y+n)||find(y+n+n)==find(x))ans++;
			else{
				_union(x,y);
				_union(x+n,y+n);
				_union(x+n+n,y+n+n);
			}
		}
		else{
			if(find(x)==find(y)||find(y+n)==find(x)){
				ans++;
			}else{
				_union(x,y+n);
				_union(x+n,y+n+n);
				_union(x+n+n,y);
			}
		}
	}
	printf("%d",ans);
	return 0;
}

求大佬指教TAT

2020/8/18 11:10
加载中...