Cod sursa(job #3218508)

Utilizator stefan2006bossLazar Stefan stefan2006boss Data 27 martie 2024 12:12:28
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int tata[NMAX];
int h[NMAX];
void Union(int x, int y)
{
 if(h[x]<h[y])
   {
    tata[x]=y;
   }
   else
   if(h[y]<h[x])
     {
      tata[y]=x;
     }
     else
     {
      tata[y]=x;
      h[y]++;
     }
}
int Find(int x)
{
 int r, y;
 r=x;
 while(tata[r])
       r=tata[r];
 do{
    y=tata[x];
    tata[x]=r;
    x=y;
 }
 while(tata[x]!=r);
 return tata[x];
}
int main()
{
 int n, m, multimex, multimey;
 int x, y, c;
 fin>>n>>m;
 for(int i=1;i<=m;i++)
    {
     fin>>c>>x>>y;
     multimex=Find(x);
     multimey=Find(y);
     if(c==1)
       {
        Union(multimex, multimey);
       }
       else
       {
        if(multimex==multimey)
           fout<<"DA"<<'\n';
           else
           fout<<"NU"<<'\n';
       }

    }

    return 0;
}