Pagini recente » Cod sursa (job #2514864) | Cod sursa (job #637852) | Cod sursa (job #1617348) | Cod sursa (job #1509417) | Cod sursa (job #2949068)
#include <iostream>
#include <fstream>
using namespace std;
int tata[100001], h[100001];
int Find(int x)
{
int r=x;
//determinam radacina arborelui
while(tata[r])
r=tata[r];
//comprimam drumul de la x la radacina
int t,y=x;
while(y!=r)
{
t=tata[y];
tata[y]=r;
y=t;
}
return r;
}
void Union(int x, int y)
{
if(h[x]>h[y])
tata[y]=x;
else
{
tata[x]=y;
if(h[x]==h[y])
h[y]++;
}
}
int main()
{
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,i,k,x,y;
f>>n>>m;
for(i=1;i<=n;i++)
{
tata[i]=0;
h[i]=1;
}
while(f>>k>>x>>y)
{
if(k==1)
{
Union(x,y);
}
else if(k==2)
{
if(Find(x)==Find(y))
g<<"DA"<<endl;
else
g<<"NU"<<endl;
}
}
return 0;
}