Cod sursa(job #2924739)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 9 octombrie 2022 19:21:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <algorithm>

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

using namespace std;

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[x]+p[y];
}

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

int main()
{
    int n,m,i,j,tip,x,y;
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        t[i]=i;
        p[i]=1;
    }
    for(i=1;i<=m;i++)
    {
        fin>>tip>>x>>y;
        if(tip==1)
            get_edges(x,y);
        else
            if(root(x)==root(y))
                fout<<"DA\n";
            else
                fout<<"NU\n";
    }
    return 0;
}