Pagini recente » Cod sursa (job #1040867) | Cod sursa (job #702867) | Cod sursa (job #2790392) | Cod sursa (job #2596547) | Cod sursa (job #1847439)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
const int NMAX=100003;
int n , m, rang[NMAX], rad[NMAX];
void unite (int x, int y)
{
if (rang[x]>rang[y])rad[y]=x;
else rad[x]=y;
if (rang[x]==rang[y])rang[y]++;
}
int findd (int x)
{
int i, y;
for (i = x; rad[i] != i; i = rad[i]);
while (rad[x] != x)
{
y = rad[x];
rad[x] = i;
x = y;
}
return i;
}
int main()
{
int type, x, y;
fin>>n>>m;
for ( int i=1; i<=n; ++i)
{
rad[i]=i;
rang[i]=1;
}
for (int i=1; i<=m; ++i)
{
fin>>type;
if (type==1)
{
fin>>x>>y;
if (findd(x)!=findd(y))unite(findd(x), findd(y));
}
else
{
fin>>x>>y;
if (findd(x)==findd(y)) fout<<"DA"<<"\n";
else fout<<"NU"<<"\n";
}
}
return 0;
}