MLE了七个点,求助大佬
查看原帖
MLE了七个点,求助大佬
346951
jjb_coder楼主2020/11/17 18:40
#include<iostream>
using namespace std;
const int max_n=150000+16;
int pre[max_n];
int find(int x)
{
	if(pre[x]==x)
		return x;
	else
		return pre[x]=find(pre[x]);//压缩路径 
}
int main(void)
{
	int n,k,c,x,y;
	int number=0;
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		pre[i]=i;
		pre[i+n]=i+n;
		pre[i+2*n]=i+2*n;
	}//初始化 
	while(k--){
		cin>>c>>x>>y;
		if(x>n||y>n){
			number++;
		}
		else{
			if(c==1){
				//判断同类,并且存入同类 
				if((find(x)!=find(y+n))&&(find(y)!=find(x+n))){//不是互吃则存入信息 
					pre[find(x)]=y;
					pre[find(x+n)]=y+n;
					pre[find(x+2*n)]=y+2*n;	
				}
				else{
					number++;
				}
									
			}
			else{
				if(x==y)
					number++;
				else{
					if(find(x)!=find(y)&&find(y)!=find(x+n)){//不是这两个条件中的一个,则可以把消息加入 
						pre[find(x)]=find(y+n);
						pre[find(x+n)]=find(y+2*n);
						pre[find(x+2*n)]=find(y);
					}
					else
						number++;
				}	
			}
		}
	}
	cout<<number;
	return 0;
 } 
2020/11/17 18:40
加载中...