好水的数据

P3367 【模板】并查集

Judgelight @ 2023-04-09 09:11:26

启发式合并,但是去掉了启发式。

link

#include<bits/stdc++.h>
#define N 10009
using namespace std;
int n,m,belong[N];
vector<int>v[N];
signed main(){
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        v[i].push_back(i);
        belong[i]=i;
    }
    for(int i=1;i<=m;i++){
        int op,x,y;
        cin>>op>>x>>y;
        if(op==1){
            if(belong[x]==belong[y]){
                continue;
            }
            x=belong[x],y=belong[y];
//          if(v[x].size()>v[y].size()){
//              swap(x,y);
//          }
            for(int j=0;j<v[x].size();j++){
                belong[v[x][j]]=y;
                v[y].push_back(v[x][j]);
            }
            v[x].clear();
        }
        else{
            v[belong[x]]==v[belong[y]]?cout<<"Y"<<endl:cout<<"N"<<endl;
        }
    }
    return 0;
}

by _Haoomff_ @ 2023-04-09 09:18:22

@Judgelight 这是一道橙题……

不要质疑一道通过76.27k的题目


by Judgelight @ 2023-04-09 09:21:31

@Haoomff 但是我时间复杂度是错误的啊。


by Sprague_Garundy @ 2023-04-09 09:22:08

@Haoomff 不会回复可以不回复,人家说的是数据水不是数据错了。


by zym113 @ 2023-04-09 10:05:32


by undefind @ 2023-06-17 09:36:55

已AC,语言:C++14(GCC9)

#include<bits/stdc++.h>
using namespace std;
const int Nmax=1e6+7;
int fa[Nmax]; 
int find(int x){
    if (fa[x]!=x) fa[x]=find(fa[x]);
    return fa[x];
}
void merge(int a,int b){
    int r1=find(a),r2=find(b);
    if(r1!=r2) fa[r1]=r2;
}
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        fa[i]=i;
    while(m--){
        int z,x,y;
        cin>>z>>x>>y;
        if(z==1) merge(x,y);
        else{
            if(find(x)==find(y)) cout<<"Y"<<endl;
            else cout<<"N"<<endl;   
        }
    }
    return 0;
}

by y_kx_b @ 2023-07-27 21:40:45

@zym113 不对啊,复杂度不是 O(nm) 的么


|