Pagini recente » Cod sursa (job #1984599) | Cod sursa (job #972707) | Cod sursa (job #2971516) | Cod sursa (job #1015494) | Cod sursa (job #266352)
Cod sursa(job #266352)
#include <cstdio>
#define maxn 100001
int n, m;
int parent[maxn], rank[maxn];
int find(int v)
{
if (parent[v] == v) return v;
return (parent[v] = find(parent[v]));
}
void merge(int a, int b)
{
a = find(a); b = find(b);
if (rank[a] > rank[b])
{
parent[b] = a;
}
else
{
parent[a] = b;
if (rank[a] == rank[b]) ++rank[b];
}
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) parent[i] = i;
for (int i = 0; i < m; ++i)
{
int tip, x, y;
scanf("%d%d%d", &tip, &x, &y);
switch(tip)
{
case 1: merge(x,y); break;
case 2:
{
if (find(x) == find(y))
printf("DA\n");
else
printf("NU\n");
}
}
}
}