Pagini recente » Cod sursa (job #2308134) | Istoria paginii runda/infogang/clasament | Cod sursa (job #1646489) | Cod sursa (job #2161282) | Cod sursa (job #2142215)
#include <cstdio>
using namespace std;
struct node
{
int parent;
}node[100001];
int Find(int target)
{
int root = target, oldParent;
while(node[root].parent != root)
{
root = node[root].parent;
}
while(node[target].parent != target)
{
oldParent = node[target].parent;
node[target].parent = root;
target = oldParent;
}
return root;
}
void Union(int x, int y)
{
node[Find(y)].parent = Find(x);
}
int main()
{
int sets, queries, task, x, y;
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d", &sets, &queries);
for(int i = 1; i <= sets; i++)
{
node[i].parent = i;
}
for(int i = 1; i <= queries; i++)
{
scanf("%d %d %d", &task, &x, &y);
if(task == 1)
{
Union(x, y);
}
else
{
printf("%s\n", (Find(x) == Find(y)) ? "DA" : "NU");
}
}
return 0;
}