Pagini recente » Cod sursa (job #2861173) | Cod sursa (job #336245) | Cod sursa (job #2091011) | Cod sursa (job #926682) | Cod sursa (job #2375870)
#include <iostream>
#include <fstream>
#define nmax 100000
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,r[nmax+5],t[nmax+5];
int tata(int x)
{
int i,y;
for(i=x;i!=t[i];i=t[i]);
while(t[x]!=x)
{
y=t[x];
t[x]=i;
x=y;
}
return i;
}
void unite(int x,int y)
{
r[x]>r[y]?t[y]=x:t[x]=y;
r[y]+=(r[x]==r[y]);
}
int main()
{
fin>>n>>m;
int x,y,z;
for(int i=1;i<=n;i++)
r[i]=1,t[i]=i;
while(fin>>z>>x>>y)
{
switch(z)
{
case 1:
unite(x,y);
break;
case 2:
if(tata(x)==tata(y))
fout<<"DA\n";
else
fout<<"NU\n";
}
}
return 0;
}