Cod sursa(job #2419691)

Utilizator lulu1602Pantiru Luana Catalina lulu1602 Data 9 mai 2019 11:20:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
using namespace std;
int tata[500001];
int grad[500001];
int N,M,x,y,op;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int findtata(int nod)
{
    if(tata[nod]==nod) return nod;
    tata[nod]=findtata(tata[nod]);
    return tata[nod];
}
int main()
{
    fin>>N>>M;
    for(int i=1;i<=N;i++)
    {
        tata[i]=i;
        grad[i]=1;
    }
    for(int i=0;i<M;i++)
    {
        fin>>op>>x>>y;
        int fx,fy;
        fx=findtata(x);
        fy=findtata(y);
        if(op==1)
        {
            if(grad[fx]<grad[fy])
            {
                tata[fx]=fy;
                grad[fy]+=grad[fx];
            }
            else
            {
                tata[fy]=fx;
                grad[fx]+=grad[fy];
            }
        }
        else if(op==2)
        {
            if(fx==fy)
                fout<<"DA"<<'\n';
            else fout<<"NU"<<'\n';
        }
    }
    return 0;
}