想问一下为什么递归 比 我这种循环的方式 压缩的快
查看原帖
想问一下为什么递归 比 我这种循环的方式 压缩的快
465435
ykily楼主2021/4/16 22:05
#include<iostream>
#include<cstdio>
#define ll long long
using namespace std;

ll fa[210000];
ll n,m;

inline ll read()
{
	ll x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	 {
		if(ch=='-')
		 f=-1;
		ch=getchar();
	 }
	while(ch>='0'&&ch<='9')
	 {
	 	x=(x<<1)+(x<<3)+(ch^48);
	 	ch=getchar();
	 }
	return x*f;
}

void f()
 {
 	for(ll i=1;i<=n;++i)
 	 fa[i]=i;
 	return;
 }
 
ll find(ll m) 
 {
   while(fa[m]!=m)
    m=fa[m];
   return m; 
 }//循环的方式 
 
ll find(int m){
    return fa[m]==m?m:fa[m]=find(fa[m]);
}//递归的方式 

void concern(ll x,ll y)
 {
   ll baba1,baba2;
    baba1=find(x);
    baba2=find(y);
   if(baba1!=baba2)
   fa[baba1]=baba2;
   return;
 }

int main()
{
   n=read();m=read();
  ll z,x,y,sum=1;
   f();
  char save[210000];
  for(ll i=1;i<=m;++i)
   {
   	z=read();x=read();y=read();
   	 if(z==1)
   	  {
   	  	concern(x,y);
   	  }
   	 else
   	  {
   	  	if(find(x)==find(y))
   	  	 save[sum]='Y';
   	  	else
   	  	 save[sum]='N';
   	  	++sum;
   	  }
   }
  for(ll i=1;i<sum;++i)
    printf("%c\n",save[i]);
  return 0;	
}
2021/4/16 22:05
加载中...