Pagini recente » Cod sursa (job #897043) | Cod sursa (job #1830986) | Cod sursa (job #2418049) | Cod sursa (job #1170369) | Cod sursa (job #3124229)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
const int NMAX = 1e5;
int n, m;
vector<int> T(NMAX + 1, -1);
int GetRoot(int Node)
{
int Root = 0, aux = 0;
while(T[Node] > 0)
Node = T[Node];
Root = Node;
while(Node != Root)
{
aux = T[Node];
T[Node] = Root;
Node = aux;
}
return Root;
}
void Join(int x, int y)
{
int RootX = GetRoot(x);
int RootY = GetRoot(y);
if(T[RootX] <= T[RootY])
{
T[RootX] += T[RootY];
T[RootY] = RootX;
}
else
{
T[RootY] += T[RootX];
T[RootX] = RootY;
}
}
int main()
{
cin >> n >> m;
while(m--)
{
int tip, x, y;
cin >> tip >> x >> y;
if(tip == 1)
Join(x, y);
else
cout << (GetRoot(x) == GetRoot(y) ? "DA" : "NU") << '\n';
}
return 0;
}