Pagini recente » Cod sursa (job #1593996) | Cod sursa (job #2956425) | Cod sursa (job #626927) | Cod sursa (job #1132629) | Cod sursa (job #2517264)
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
FILE *f,*g;
int t[200002],rang[200002];
int n,m;
void read()
{
fscanf(f,"%d %d",&n,&m);
}
int root(int node)
{
if(t[node]!=node)
t[node]=root(t[node]);
return t[node];
}
void unite(int x, int y)
{
if(rang[x]<rang[y])
t[x]=t[y];
else
t[y]=t[x];
if(rang[x]==rang[y])
rang[x]++;
}
void solve()
{ int task,x,y;
for(int i=1; i<=n; i++)
t[i]=i;
for(int i=1; i<=m; i++)
{
fscanf(f,"%d %d %d",&task,&x,&y);
if(task==1)
{
x=root(x);
y=root(y);
unite(x,y);
}
else
{
if(root(x)==root(y))
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
}
}
}
int main()
{
f=fopen("disjoint.in","r");
g=fopen("disjoint.out","w");
read();
solve();
fclose(f);
fclose(g);
return 0;
}