Pagini recente » Cod sursa (job #3273115) | Cod sursa (job #2212689) | Cod sursa (job #1846745) | Cod sursa (job #1214855) | Cod sursa (job #3258813)
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
//#define f cin
//#define g cout
int n, m, x, y, t[100010], r[100010], c;
int root(int nod)
{
int start=nod;
while(t[nod]!=0)
{
nod=t[nod];
}
int aux=nod;
while(t[start]!=0)
{
aux=t[start];
t[start]=nod;
start=aux;
}
return nod;
}
void join(int ax, int bx)
{
//cout<<ax<<bx;
int a=root(ax);
int b=root(bx);
if(ax==bx)
return;
if(r[a]>r[b])
{
t[b]=a;
}
else
{
if(r[a]==r[b])
r[b]++;
t[a]=b;
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
{
r[i]=1;
}
for(int i=1;i<=m;i++)
{
f>>c>>x>>y;
if(c==1)
join(x, y);
else
{
cout<<root(x)<<" "<<root(y)<<endl;
if(root(x)==root(y))
g<<"DA"<<endl;
else
g<<"NU"<<endl;
}
}
return 0;
}