Cod sursa(job #2686420)

Utilizator OffuruAndrei Rozmarin Offuru Data 19 decembrie 2020 09:52:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX=100010;

struct node
{
    int parent;
    int depth;
}graph[NMAX];

int findroot(int x)
{
    if(graph[x].parent==0)
        return x;
    int parent=findroot(graph[x].parent);
    graph[x].parent=parent;
    return parent;
}

void read()
{
    int n,m,t,x,y;
    fin>>n>>m;
    while(fin>>t>>x>>y)
    {
        if(t==1)
        {
            int r1=findroot(x);
            int r2=findroot(y);

            if(graph[r1].depth==graph[r2].depth)
            {
                graph[r1].parent=r2;
                graph[r2].depth++;
            }
            else if(graph[r1].depth<graph[r2].depth)
                graph[r1].parent=r2;
            else
                graph[r2].parent=r1;
        }
        else
        {
            if(findroot(x)==findroot(y))
                fout<<"DA\n";
            else
                fout<<"NU\n";
        }
    }
}

int main()
{
    read();
    return 0;
}