Pagini recente » Cod sursa (job #856113) | Cod sursa (job #502838) | Cod sursa (job #682983) | Cod sursa (job #2739995) | Cod sursa (job #1542437)
#include <iostream>
#include <fstream>
#define nmax 100003
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int T[nmax], R[nmax], n, m;
int find(int x)
{
int y=x;
while(T[x]!=x)
x=T[x];
T[y] = x; // euristica 1
return x;
}
int join(int x, int y)
{
x=find(x);
y=find(y);
if (R[y] > R[x])
{
T[x] = y;
}else{
T[y] = x; // euristica 2
}
}
int main()
{
int act, x, y;
f >> n >> m;
for(int i=1; i<=n; i++)
{
T[i]=i;
R[i]=1;
}
for(int i=1; i<=m; i++)
{
f >> act >> x >> y;
if (act == 1) join(x,y);
else g << (find(x) == find(y) ? "DA\n" : "NU\n");
}
f.close();
g.close();
return 0;
}