Pagini recente » Cod sursa (job #306270) | Cod sursa (job #1095348) | Cod sursa (job #2321190) | Cod sursa (job #2688574) | Cod sursa (job #2691913)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX = 100010;
int N, M;
int t[NMAX], rang[NMAX];
int parent (int nod) //functie pentru determinarea inceputului unei componente conexe
{
while (t[nod]!=nod)
nod = t[nod];
return nod;
}
void union_by_rank ( int nod1, int nod2)
{
if (rang[nod1] < rang[nod2])
t[nod1] = nod2;
else
if (rang[nod1] == rang [nod2])
{
t[nod1] = nod2;
rang[nod2]++;
}
else
t[nod2] = nod1;
}
int main() {
ifstream f ("disjoint.in");
ofstream g("disjoint.out");
f>>N>>M;
int x,y,op;
for(int i=1;i<=N;i++)
{
t[i] = i;
rang[i] = 1;
}
for(int i = 0; i <M; i++)
{
f>> op>>x>>y;
if(op==1)
{
union_by_rank(parent(x),parent(y));
}
else
{
if(parent(x)==parent(y))
g<<"DA\n";
else
g<<"NU\n";
}
}
return 0;
}