Pagini recente » Cod sursa (job #2295792) | Cod sursa (job #2790263) | Cod sursa (job #2902979) | Cod sursa (job #2522011) | Cod sursa (job #2369901)
#include <iostream>
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m;
int cod, x, y;
int tt[Nmax], rg[Nmax];
int root(int x)
{
int r=x;
while(tt[r]!=r) r=tt[r];
while(tt[x]!=x)
{
int y=tt[x];
tt[x]=r;
x=y;
}
return r;
}
void unite(int x, int y)
{
int X=root(x);
int Y=root(y);
if(X!=Y)
{
if(rg[X] > rg[Y]) tt[X]=Y;
else tt[Y]=X;
}
}
int main()
{
f >> n >> m;
for (int i = 1; i <= n; i++)
{
tt[i]=i;
rg[i]=1;
}
for (int i = 1; i <= m; i++)
{
f >> cod >> x >> y;
if(cod == 1) unite(x, y);
else
{
int X=root(x);
int Y=root(y);
if(X == Y) g << "DA\n";
else g << "NU\n";
}
}
return 0;
}