Cod sursa(job #2050799)

Utilizator alin1999Buzatu Alin alin1999 Data 28 octombrie 2017 11:27:00
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,q,a,b,tata[100005],pl1,pl2,i,j;
bool ok;
int verif(int x)
{
    while(tata[x]!=x)
        x=tata[x];
    return x;
}
int verif2(int x)
{
    while(tata[x]!=x)
        {if(x==b)
        break;
    x=tata[x];}
    return x;
}
int verif3(int x)
{
    while(tata[x]!=x)
        {if(x==a)
        break;
    x=tata[x];}
    return x;
}
vector<int>c[100005];
int main()
{
   fin>>n>>m;
   for(int i=1;i<=n;++i)
    tata[i]=i;
   for(int i=1;i<=m;++i)
   {
       fin>>q>>a>>b;

   if(q==1)
       {
           pl1=verif(a);
           pl2=verif(b);
       tata[pl1]=pl2;}
   if(q==2)
    {
        if(a!=b)
        {
        pl1=verif2(a);
        if(pl1==b)
    fout<<"DA"<<"\n";
    else
        {pl2=verif3(b);
        if(pl2==a)
            fout<<"DA"<<"\n";
            else
        {if(pl1==pl2)
            fout<<"DA"<<"\n";
        else
    fout<<"NU"<<"\n";}
        }}
    else
        fout<<"DA"<<"\n";
   }
   }
    return 0;
}