Pagini recente » Cod sursa (job #1897703) | Cod sursa (job #39258) | Cod sursa (job #1507571) | Borderou de evaluare (job #2116791) | Cod sursa (job #2660435)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int pt[NMAX],rg[NMAX], t, x, y, n, m;
int Find(int x)
{
int r = x, p;
while(pt[r] != r)
{
r = pt[r];
}
while(x != r)
{
p = pt[x];
pt[x] = r;
x = p;
}
return r;
}
void Merge(int x, int y)
{
x = Find(x);
y = Find(y);
if(x==y)
return;
if(rg[x]<rg[y])
swap(x,y);
pt[y] = x;
if(rg[x] == rg[y])
rg[x]++;
}
int main()
{
fin >> n >> m;
for ( int i = 1 ; i <= n ; i ++ )
{
pt[i] = i;
rg[i] = 1;
}
for ( int i = 1 ; i <= m ; i ++ )
{
fin >> t >> x >> y;
if(t==1)
{
Merge(x,y);
}
else
{
if(Find(x) == Find(y))
fout << "DA" << '\n';
else
fout << "NU" << '\n';
}
}
return 0;
}