Pagini recente » Diferente pentru schimbare-borland/alternativa intre reviziile 13 si 12 | Cod sursa (job #2419434) | Atasamentele paginii Clasament gimnaziu_4 | Atasamentele paginii Clasament vacanta_10_3 | Cod sursa (job #2427327)
#include <iostream>
#include <fstream>
#include <vector>
#define Nmax 100000
using namespace std;
///-----FISIERE-----
ifstream in("disjoint.in");
ofstream out("disjoint.out");
///-----TIPURI DE DATE-----
int tata[Nmax], grad[Nmax];
int FindFather(int nod)
{
if(tata[nod] == nod)
return nod;
tata[nod] = FindFather(tata[nod]);
return tata[nod];
}
void connect(int x, int y)
{
int fx = FindFather(x);
int fy = FindFather(y);
if(fx == fy)
return;
if(grad[fx] > grad[fy])
{
tata[fy] = fx;
grad[fx] += grad[fy];
}
else
{
tata[fx] = fy;
grad[fy] += grad[fx];
}
}
int main()
{
///-----CITIRE DATE DIN FISIER-----
int N, M;
in >> N >> M;
for(int i = 1; i <= N; i++)
{ tata[i] = i;
grad[i] = 1;
}
int cod, x, y;
for(int i = 0; i < M; i++)
{
in >> cod >> x >> y;
int fx = FindFather(x);
int fy = FindFather(y);
if(cod == 1)
connect(x, y);
else if(fx == fy)
out << "DA" << endl;
else
out << "NU" << endl;
}
return 0;
}