Pagini recente » Cod sursa (job #3254429) | Cod sursa (job #596790) | Cod sursa (job #1508876) | Cod sursa (job #1168847) | Cod sursa (job #2935664)
#include <bits/stdc++.h>
using namespace std;
#define nmax 100000
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int t[nmax],rang[nmax];
int radacina(int k)
{
if(t[k]==0)return k;
else{
int x=radacina(t[k]);
t[k]=x;
return x;
}
}
void unire(int a,int b)
{
int ra=radacina(a);
int rb=radacina(b);
if(ra!=rb){
if(rang[ra]>rang[rb])t[rb]=ra;
else{
t[ra]=rb;
if(rang[ra]==rang[rb])rang[rb]++;
}
}
}
int main()
{
int n,m;
f>>n;
f>>m;
for(int i=1; i<=m; ++i)
{
int cer,x,y;
f>>cer>>x>>y;
if(cer==1)unire(x,y);
else{
int a=radacina(x);
int b=radacina(y);
if(a==b)g<<"DA\n";
else g<<"NU\n";
}
}
}