请问为什么会超时
查看原帖
请问为什么会超时
1326527
drewxa7楼主2024/3/29 17:17

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int findRoot(int m,int *a){
	int root=m;
	while(a[root]>0){
		root=a[root];
	}
	if(a[m]>0){
		a[m]=root;
	}
	return root;
}
void merge(int m,int n,int *a){
	int mRoot=findRoot(m,a);
	int nRoot=findRoot(n,a);
	a[mRoot]=nRoot;
}
int main(){
	int n,m;
	scanf("%d %d",&n,&m);
	n++;
	int a[n];
	memset(a,-1,sizeof(a));
	int q[m];
	int qSize=0;
	int z,x,y;
	int r1,r2;
	for(int i=0;i<m;i++){
		scanf("%d %d %d",&z,&x,&y);
		if(z==1){
			merge(x,y,a);
		}
		else{
			r1=findRoot(x,a);
			r2=findRoot(y,a);
			if(r1==r2){
				printf("Y\n");
			}
			else{
				printf("N\n");
			}
		}
	}
}
2024/3/29 17:17
加载中...