浥轻尘 @ 2018-03-18 21:23:24
#include<iostream>
using namespace std;
int n,m,f[10020]={0};
int find(int x)
{
if(f[x]==x) return x;
else return find(f[x]);
}
int bj(int x,int y)
{
int u,v;
u=find(x);
v=find(y);
f[v]=f[u];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
f[i]=i;
while(m--)
{
int z,x,y;
cin>>z>>x>>y;
if(z==1) f[find(x)]=find(y);
else
if(find(x)==find(y)) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
}
只有70分 2,9,10没过。。。。
by moongazer @ 2018-03-18 21:25:07
路径压缩一下
by moongazer @ 2018-03-18 21:25:30
int find(int x)
{
if(f[x]==x) return x;
else return f[x]=find(f[x]);
}
by moongazer @ 2018-03-18 21:26:13
这样下次查找时就不会从头找起了,从上一次的祖先找起
by 浥轻尘 @ 2018-03-20 17:45:43
@Andúril_g 谢谢!!!!