ORZ 大佬们,为什么会TLE。。。

P3367 【模板】并查集

浥轻尘 @ 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 谢谢!!!!


|