Pagini recente » Cod sursa (job #480946) | Cod sursa (job #1459216) | Cod sursa (job #2325077) | Cod sursa (job #2945846) | Cod sursa (job #379717)
Cod sursa(job #379717)
#include<fstream.h>
int padre[101000],rango[101000];
int busca(int x)
{
int t=x,temp[101000],k=0;
while(t!=padre[t])
{
temp[++k]=t;
t=padre[t];
}
for(x=1;x<=k;x++)
padre[temp[x]]=t;
return t;
}
void unificar(int x, int y)
{
if(rango[x]>rango[y])
padre[y]=x;
else
padre[x]=y;
if(rango[x]==rango[y])
rango[y]++;
}
int main()
{
int n,m,i,op,x,y;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f>>n>>m;
for(i=1;i<=n;i++)
{
padre[i]=i;
rango[i]=1;
}
for(i=1;i<=m;i++)
{
f>>op>>x>>y;
if(op==1)
unificar(busca(x),busca(y));
else
if(busca(x)==busca(y))
g<<"DA\n";
else
g<<"NU\n";
}
return 0;
}