Cod sursa(job #2447987)

Utilizator vladadAndries Vlad Andrei vladad Data 15 august 2019 13:52:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda excelenta-season2-tema1 Marime 0.82 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int tt[100001], rg[100001], n, q, x, y, tip;
int find1(int x)
{
    if(tt[x] == x)
        return x;
    return tt[x] = find1(tt[x]);
}
void unite(int x, int y)
{
    if(rg[x]>rg[y])
        tt[y]=x, rg[x]+=rg[y];
    else
        tt[x]=y, rg[y]+=rg[x];
}
int main()
{
    f>>n>>q;
    for(int i=1; i<=n; i++)
    {
        tt[i]=i;
        rg[i]=1;
    }
    for(; q; q--)
    {
        f>>tip>>x>>y;
        if(tip==1)
        {
            if(find1(x)!=find1(y))
                unite(find1(x), find1(y));
        }
        else
        {
            if(find1(x)==find1(y))
                g<<"DA";
            else
                g<<"NU";
            g<<'\n';
        }
    }
    return 0;
}