Pagini recente » Cod sursa (job #1259017) | Cod sursa (job #2407186) | Cod sursa (job #1973286) | Cod sursa (job #3004501) | Cod sursa (job #404036)
Cod sursa(job #404036)
#include<fstream.h>
int rang[100100],padre[100100];
void unire(int a, int b)
{
if(rang[a]==rang[b])
{
rang[a]++;
rang[b]++;
padre[b]=a;
}
else
if(rang[a]>rang[b])
padre[b]=a;
else
padre[a]=b;
}
int query(int x)
{
int i,temp[100100];
while(x!=padre[x])
{
temp[++temp[0]]=x;
x=padre[x];
}
for(i=1;i<=temp[0];i++)
padre[temp[i]]=x;
return x;
}
int main()
{
int n,m,a,b,i,op;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f>>n>>m;
for(i=1;i<=n;i++)
{
rang[i]=1;
padre[i]=i;
}
while(m--)
{
f>>op>>a>>b;
if(op==1)
unire(a,b);
else
if(query(a)==query(b))
g<<"DA\n";
else
g<<"NU\n";
}
return 0;
}