Cod sursa(job #3247526)

Utilizator postoocezar andrei mihai tutunaru tambozi teodor lot postoo Data 8 octombrie 2024 10:49:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>
#define long long int
using namespace std;

//ifstream fin("lantmaxim.in");
//ofstream fout("lantmaxim.out");

struct DSU
{
    int N;
    vector<int> parent;
    void init(int n)
    {
        N=n;
        parent.resize(N+1);
        for(int i=1; i<=N; i++)
            parent[i]=i;
    }
    int find(int u)
    {
        if(u==parent[u])
            return u;
        return parent[u]=find(parent[u]);
    }
    void unite(int u, int v)
    {
        u=find(u);
        v=find(v);
        if(u!=v)
            parent[u]=v;
    }
};

signed main()
{
    ifstream cin("disjoint.in");
    ofstream cout("disjoint.out");
    DSU dsu;
    int n, m, x, a, b;
    cin>>n>>m;
    dsu.init(n);
    for(int i=1; i<=m; i++)
    {
        cin>>x>>a>>b;
        if(x==1)
        {
            dsu.unite(a, b);
        }
        else
        {
            if(dsu.find(a)==dsu.find(b))
                cout<<"DA"<<'\n';
            else
                cout<<"NU"<<'\n';
        }
    }
    return 0;
}