Pagini recente » Cod sursa (job #545408) | Cod sursa (job #2710799) | Cod sursa (job #2423650) | Cod sursa (job #729057) | Cod sursa (job #2736415)
#include <iostream>
#include <fstream>
using namespace std;
int n,m,i,t[100005],c,a,b,t1,t2,r[100005];
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int tata(int x)
{
if (t[x]==x) return x;
else tata(t[x]);
}
void uniform(int a, int t1)
{
if (t[a]==t1) return;
else
{
t[a]=t1;
uniform(t[a],t1);
}
}
void unire(int t1, int t2)
{
if (r[t1]>r[t2])
t[t2]=t1;
else t[t1]=t[t2];
if (r[t1]==r[t2]) r[t2]++;
}
int main()
{
in>>n>>m;
for (i=1;i<=n;i++)
t[i]=i;
for (i=1;i<=m;i++)
{
in>>c;
if (c==1)
{
in>>a>>b;
t1=tata(a);
uniform(a,t1);
t2=tata(b);
uniform(b,t2);
unire(t1,t2);
}
else
{
in>>a>>b;
t1=tata(a);
t2=tata(b);
uniform(a,t1);
uniform(b,t2);
if (t1==t2) out<<"DA"<<endl;
else out<<"NU"<<endl;
}
}
}