蒟蒻求教,3个TLE

P3367 【模板】并查集

wisdom_grass @ 2017-08-13 17:23:56

代码如下

#include <iostream>
using namespace std;
int n,m;
int z,x,y; 
int fuck[10001];
int find(int x)
{
    if(fuck[x]!=x)
        x=find(fuck[x]);
    return x;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        fuck[i]=i;
    for(int i=1;i<=m;i++)
    {
        cin>>z>>x>>y;
        if(z==1)
        {
            int f1=find(x);
            int f2=find(y);
            if(f1!=f2)
            {
                fuck[f2]=f1;
                fuck[y]=f1;
            }
        }
        else
        {
            if(find(x)==find(y))
                cout<<"Y\n";
            else
                cout<<"N\n";
        }
    }
}

by xun薰 @ 2017-08-13 17:32:20

find函数优化一下路径压缩就可以了

#include <iostream>
using namespace std;
int n,m;
int z,x,y; 
int fuck[10001];
int find(int x)
{
    return fuck[x]==x?x:fuck[x]=find(fuck[x]);
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        fuck[i]=i;
    for(int i=1;i<=m;i++)
    {
        cin>>z>>x>>y;
        if(z==1)
        {
            int f1=find(x);
            int f2=find(y);
            if(f1!=f2)
            {
                fuck[f2]=f1;
                fuck[y]=f1;
            }
        }
        else
        {
            if(find(x)==find(y))
                cout<<"Y\n";
            else
                cout<<"N\n";
        }
    }
}

by wisdom_grass @ 2017-08-13 18:37:05

谢谢


by wisdom_grass @ 2017-08-13 18:37:24

@。。薰。。 %%%


by xun薰 @ 2017-08-13 19:42:05

@liyuheng 不用谢 最好去了解一下优化的原理哦


by huangxuhan @ 2017-08-26 16:56:34

@。。薰。。 你确定是find而不是。。。。。。


by xun薰 @ 2017-08-26 17:44:18

@huangxuhan 不是什么???


by huangxuhan @ 2017-08-27 10:23:00

@。。薰。。 好吧有两个数组,一个是find,一个是。。。。。。


by huangxuhan @ 2017-08-27 10:23:40

怪不得看起来怪怪的


by nnez_xiaoliwei @ 2017-09-13 19:28:46

getfather系列路过


by Owen_codeisking @ 2017-09-23 09:39:55

f**k的数组


|