Pagini recente » Cod sursa (job #2245205) | Rating Tudor Moga (TMoga) | Cod sursa (job #1035035) | Cod sursa (job #119138) | Cod sursa (job #2853142)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int tati[100001],inaltimi[100001];
int n,m,c,x,y;
int gasire_tata(int x)
{
while(tati[x]!=x)
{
x = tati[x];
}
return x;
}
void aplatizare(int x,int tata)
{
int aux;
while(tati[x]!=x)
{
aux = x;
x = tati[x];
}
}
void unire(int x1,int x2)
{
int tata1 = gasire_tata(x1);
int tata2 = gasire_tata(x2);
aplatizare(x1,tata1);
aplatizare(x2,tata2);
if(inaltimi[tata1]>inaltimi[tata2])
{
tati[tata2] = tata1;
}
else if(inaltimi[tata1]<inaltimi[tata2])
{
tati[tata1] = tata2;
}
else
{
tati[tata1] = tata2;
inaltimi[tata1]++;
}
}
void init()
{
for(int i= 1; i<=n; i++)
{
tati[i] = i;
inaltimi[i] = 1;
}
}
void citire()
{
f >> n >> m;
}
void rez()
{
for(int i =1 ; i<=m; i++)
{
f >> c;
if(c == 1)
{
int x,y;
f >> x >> y;
unire(x,y);
}
else
{
int x,y;
f >> x >> y;
int tatax = gasire_tata(x);
int tatay = gasire_tata(y);
if(tatax==tatay)
g << "DA";
else
g <<"NU";
g << endl;
}
}
}
int main()
{
citire();
init();
rez();
}