Cod sursa(job #2925875)

Utilizator NutaAlexandruASN49K NutaAlexandru Data 16 octombrie 2022 12:22:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#import <algorithm>
#import <vector>
#import <map>
#import <set>
#import <deque>
#import <queue>
#import <cassert>
//#import <cmath>
#import <cstring>
#import <cctype>
#import <cstdlib>
#import <stack>
#import<unordered_map>
using namespace std;
class DSU
{
    vector<int>t;
    int r;
public:
    DSU(int n)
    {
        t.resize(n+1);
        for(int i=1;i<=n;i++)
        {
            t[i]=i;
        }
        r=n;
    }
    int root(int x)
    {
        if(x==t[x])return x;
        t[x]=root(t[x]);
        return t[x];
    }
    void unite(int a,int b)
    {
        int x=root(a);
        int y=root(b);
        if(x==y)
        {
            return;
        }
        r--;
        t[y]=x;
    }

};
main()
{
    ifstream cin("disjoint.in");
    ofstream cout("disjoint.out");
    int n,q;
    cin>>n>>q;
    DSU dsu(n);
    while(q--)
    {
        int cer,x,y;
        cin>>cer>>x>>y;
        if(cer==1)
        {
            dsu.unite(x,y);
        }
        else
        {
            if(dsu.root(x)==dsu.root(y))
            {
                cout<<"DA\n";
            }
            else
            {
                cout<<"NU\n";
            }
        }
    }
}