Pagini recente » Cod sursa (job #960436) | Cod sursa (job #2572417) | Cod sursa (job #1512408) | Cod sursa (job #2259982) | Cod sursa (job #2837349)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int N=100001;
int n, m, i, j, tata[N], h[N], op, x, y;
int Find(int x)
{
int y=x;
while(tata[y])
y=tata[y];
x=y;
while(tata[x])
{
int r=tata[x];
tata[x]=y;
x=r;
}
return y;
}
void Union(int x, int y)
{
x=Find(x), y=Find(y);
if(h[x]>h[y])
tata[y]=x;
else if(h[x]<h[y])
tata[x]=y;
else
{
tata[y]=x;
h[x]++;
}
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;++i)
h[i]=1, tata[i]=0;
for(i=1;i<=m;++i)
{
fin>>op>>x>>y;
if(op==1)
Union(x,y);
else
{
if(Find(x)==Find(y))
fout<<"DA\n";
else fout<<"NU\n";
}
}
return 0;
}