Pagini recente » Cod sursa (job #2999752) | Cod sursa (job #2578946) | Cod sursa (job #2276900) | Cod sursa (job #246741) | Cod sursa (job #2989067)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
ifstream f("disjoint.in");
ofstream g ("disjoint.out");
int n,m;
int tati[100001];
int inaltimi[100001];
int aflare(int nod)
{
if(tati[nod] == nod)
return nod;
return aflare(tati[nod]);
}
void comprimare(int nod,int tata)
{
if(tati[nod] == nod)
return;
comprimare(tati[nod],tata);
tati[nod] = tata;
}
void unire(int nod1,int nod2)
{
int tata1 = aflare(nod1);
int tata2 = aflare(nod2);
comprimare(nod1,tata1);
comprimare(nod2,tata2);
if(inaltimi[tata1]>inaltimi[tata2])
{
tati[tata2]= tati[tata1];
inaltimi[tata2] = inaltimi[tata1];
}
else
{
tati[tata1]= tati[tata2];
inaltimi[tata1] = inaltimi[tata2];
}
}
void verificare(int nod1,int nod2)
{
if(aflare(nod1)==aflare(nod2))
g << "DA\n";
else
g<<"NU\n";
}
void citire()
{
f >> n >> m;
for(int i = 1;i<=n;i++)
inaltimi[i] = 1,tati[i]=i;
for(int i =1;i<=m;i++)
{
int c,x,y;
f >> c >> x >> y;
if(c==1)
{
unire(x,y);
}
else
verificare(x,y);
}
}
int main()
{
citire();
}