Pagini recente » Cod sursa (job #2976557) | Cod sursa (job #1070338) | Cod sursa (job #349528) | Cod sursa (job #2695267) | Cod sursa (job #658325)
Cod sursa(job #658325)
#include<fstream>
#define NMAX 100001
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int N,M,Tata[NMAX], Rang[NMAX];
int find(int nod)
{
int R;
//parcurg arborele in sus pana la radacina
for(R = nod; Tata[R] != R; R = Tata[R]);
//acum, comprim drumul
for(; Tata[nod] != nod ; )
{
Tata[nod] = R;
nod = R;
}
return R;
}
void unite(int x, int y)
{
if(Rang[x] > Rang[y])
Tata[y] = x;
else
Tata[x] = y;
if(Rang[x] == Rang[y])
Rang[y]++;
}
int main()
{
int i,cod,x,y;
in >> N >> M;
for(i = 1; i <= N; i++)
Tata[i] = i;
for(i = 1; i <= M; i++)
{
in >> cod >> x >> y;
if(cod == 2)
if(find(x) == find(y))
out << "DA" << '\n';
else out << "NU" << '\n';
else unite(find(x),find(y));
}
}