1 条题解

  • 0
    @ 2025-11-26 21:12:03

    Written by @Yue_chen

    题意:

    给 n 个点, m个操作,

    操作一 联通 a b 点(联通是会传递的)

    操作二 询问 a b 是否联通

    思路:

    并查集板子

    时间复杂度O(n+m)

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    using i64 = long long;
    
    int f[10001];
    int Find(int x) {
        if(x == f[x]) return x;
        return f[x] = Find(f[x]);
    }
    void Union(int x, int y) {
        int fx = Find(x), fy = Find(y);
        if(fx == fy) return ;
        f[fx] = fy;
    }
    
    void solve() {
        int n, m; cin>>n>>m;
        
        for(int i=1; i<=n; ++i) f[i] = i;
        
        for(int i=1; i<=m; ++i) {
            int op, a, b; cin>>op>>a>>b;
            if(op == 1) {
                T.Union(a, b);
            }else {
                if(T.Find(a) == T.Find(b)) {
                    cout<<"Y\n";
                }else {
                    cout<<"N\n";
                }
            }
        }
    }
    
    signed main(void) {
        ios::sync_with_stdio(false); cin.tie(nullptr);
        
        int t=1; //cin>>t;
        while (t--) solve();
        return 0;
    }
    

    信息

    ID
    126
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    127
    已通过
    23
    上传者