Pagini recente » Cod sursa (job #645079) | Cod sursa (job #3206474) | Cod sursa (job #2213223) | Cod sursa (job #1084927) | Cod sursa (job #2528053)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ifstream fout("disjoint.out");
int len[100009],rad[100009];
int n;
void uneste(int a,int b)
{
int a2 = a;
int b2 = b;
while(a2 != rad[a2])
a2 = rad[a2];
while(b2 != rad[b2])
b2 = rad[b2];
if(len[a2]<len[b2])
{
swap(a,b);
swap(a2,b2);
}
rad[b2]=a2;
len[a2]+=len[b2];
while(a!=a2)
{
int aux=rad[a];
rad[a]=a2;
a=aux;
}
while(b!=a2)
{
int aux=rad[b];
rad[b]=a2;
b=aux;
}
}
void cauta(int a, int b)
{
int a2=a;
int b2=b;
while(rad[b2]!=b2)
{
b2=rad[b2];
}
while(rad[a2]!=a2)
{
a2=rad[a2];
}
if(a2==b2) fout<<"DA"<<"\n";
else fout<<"NU"<<"\n";
while(a!=a2)
{
int aux=rad[a];
rad[a]=a2;
a=aux;
}
while(b!=b2)
{
int aux=rad[b];
rad[b]=b2;
b=aux;
}
}
int main()
{
int m;
fin>>n>>m;
for(int i=1; i<=n; i++) rad[i]=i;
for(int i=1; i<=n; i++) len[i]=1;
while(m--)
{
int op,x,y;
fin>>op>>x>>y;
if(op==1)
{
uneste(x,y);
}
if(op==2)
{
cauta(x,y);
}
}
}