Pagini recente » Cod sursa (job #993815) | Cod sursa (job #519414) | Cod sursa (job #2899748) | Cod sursa (job #1777354) | Cod sursa (job #1729386)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int tata[100001],rang[100001],i,n,m,x,y,t;
int rad(int x)
{
int r=x,aux;
while(tata[r]!=r) r=tata[r];
while(x!=tata[x])
{
aux=tata[x];
tata[x]=r;
x=aux;
}
return r;
}
void reun( int x,int y)
{
if(rang[x]>rang[y]) tata[y]=x;
else tata[x]=y;
if(rang[x]==rang[y]) rang[y]++;
}
int main()
{
f>>n>>m;
for(i=1;i<=n;i++) {tata[i]=i; rang[i]=1;}
for(i=1;i<=m;i++)
{
f>>t>>x>>y;
if (t==2) { if(rad(x)==rad(y)) g<<"DA\n";
else g<<"NU\n";}
else reun(rad(x),rad(y));
}
return 0;
}