Cod sursa(job #3041526)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 31 martie 2023 17:16:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

#define cin fin
#define cout fout

ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");

const int NMAX=1e5+5;
int t[NMAX];
int p[NMAX];

int root(int x)
{
    if(t[x]==x)
        return x;
    return t[x]=root(t[x]);
}

void solve(int x,int y)
{
    x=root(x);
    y=root(y);
    if(p[x]>p[y])
        swap(x,y);
    t[y]=x;
    p[x]+=p[y];
}

void edge(int x,int y)
{
    if(root(x)!=root(y))
        solve(x,y);
}

int main()
{
    int n,m,i,j,cer,x,y;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        t[i]=i;
        p[i]=1;
    }
    for(i=1;i<=m;i++)
    {
        cin>>cer>>x>>y;
        if(cer==1)
        {
            if(root(x)!=root(y))
                solve(x,y);
        }
        else
            if(root(x)!=root(y))
                cout<<"NU\n";
            else
                cout<<"DA\n";
    }
    return 0;
}