Pagini recente » Cod sursa (job #1570217) | Cod sursa (job #794408) | Cod sursa (job #2432590) | Cod sursa (job #2854214) | Cod sursa (job #1441049)
#include <iostream>
#include <fstream>
using namespace std;
int gasit(int *n, int *m, int x)
{
int i=x;
while(n[x]!=0)
x=n[x];
if(i!=x)
{
n[i]=x;
}
return x;
}
void uniune(int *n, int *m,int x, int y)
{
if(m[x]<m[y])
{
n[x]=gasit(n,m,y);
m[x]++;
}
else
{
n[y]=gasit(n,m,x);
m[y]++;
}
}
int main()
{
ifstream f("disjoint.in");
int a,b,c,*n,nn,mm,*m;
f>>nn>>mm;
n=new int[nn+1];
m=new int[nn+1];
for( int i=1;i<=nn;i++)
m[i]=n[i]=0;
for(int i=0; i<mm; i++)
{
f>>a>>b>>c;
ofstream g("disjoint.out");
if(a==1)
uniune(n,m,b,c);
else if(a==2)
{
if(gasit(n,m,b)==gasit(n,m,c))
g<<"Da\n";
else
g<<"Nu\n";
}
}
return 0;
}