Pagini recente » Cod sursa (job #479800) | Cod sursa (job #2414632) | Cod sursa (job #1144402) | Cod sursa (job #2270733) | Cod sursa (job #2144324)
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int tata[100005],niv[100005],n,m,t1,t2;
int find (int x)
{
int a=x,r=x;
while (tata[r])
r=tata[r];
while (tata[a])
{
int z=tata[a];
tata[a]=r;
a=z;
}
return r;
}
void unite (int a,int b)
{
if (a!=b)
{
if (niv[a]<niv[b])
tata[a]=b;
else if (niv[b]<niv[a])
tata[b]=a;
else
{
tata[b]=a;
niv[a]++;
}
}
}
int main()
{
int x,y,q;
in>>n>>m;
for (int i=1; i<=m; i++)
{
in>>q>>x>>y;
t1=find(x);
t2=find(y);
if (q==1)
{
if(t1!=t2)
unite(t1,t2);
}
else
{
if(t1!=t2) out<<"NU"<<'\n';
else out<<"DA"<<'\n';
}
}
return 0;
}