Pagini recente » Cod sursa (job #2215487) | Cod sursa (job #404414) | Cod sursa (job #2162233) | Cod sursa (job #702902) | Cod sursa (job #1472584)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
#define MAX 100001
struct Node
{
unsigned int data;
}A[MAX];
int N, M;
int Find(int e)
{
if (A[e].data & 0XFFFFFF)
{
A[e].data = Find(A[e].data);
return A[e].data;
}
else
return e;
}
void Add(int x, int y)
{
x = Find(x);
y = Find(y);
if (A[x].data & 0xFF000000 > A[y].data & 0xFF000000)
A[y].data = (A[y].data & 0xFF000000) | x;
else if (A[x].data & 0xFF000000 < A[y].data & 0xFF000000)
A[x].data = (A[x].data & 0xFF000000) | y;
else
{
A[x].data = (A[x].data & 0xFF000000) | y;
A[y].data = (A[y].data & 0xFFFFFF) | (((A[y].data & 0xFF000000)>>24 +1)<<24);
}
}
void operation(int e,int x,int y)
{
switch (e)
{
case 1:
Add(x, y);
break;
case 2:
int e1, e2;
e1 = Find(x);
e2 = Find(y);
if (e1 == e2)
out << "DA\n";
else
out << "NU\n";
break;
}
}
int main()
{
in >> N >> M;
int op, x, y;
for (int i = 1;i <= M;++i)
{
in >> op >> x >> y;
operation(op, x, y);
}
in.close();
out.close();
return 0;
}