Pagini recente » Cod sursa (job #1603730) | Cod sursa (job #2169370) | Cod sursa (job #2395928) | Cod sursa (job #158293) | Cod sursa (job #404041)
Cod sursa(job #404041)
#include<fstream.h>
int rang[100100],padre[100100];
void unire(int a, int b)
{
if(rang[a]>rang[b])
padre[b]=a;
else
padre[a]=b;
if(rang[a]==rang[b])
rang[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;
}