Pagini recente » Cod sursa (job #347055) | Cod sursa (job #936270) | Cod sursa (job #2008861) | Cod sursa (job #1485463) | Cod sursa (job #2697347)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
vector<int> par;
vector<int> rang;
int n,m;
int rad(int k)
{
if(par[k]==0)
return k;
//cout<<k;
return rad(par[k]);
}
void parintare(int x,int i)
{
if(par[i]!=0)
parintare(x,par[i]);
par[i]=x,rang[i]=1;
}
void creare()
{
int x,y;
in>>x>>y;
int a=rad(x),b=rad(y);
if(rang[a]<rang[b])
{
rang[a]=rang[b]+1;
parintare(a,y);
}
else
{
rang[b]=rang[a]+1;
parintare(b,x);
}
}
void verificare()
{
int x,y,a,b;
in>>x>>y;
a=rad(x);
b=rad(y);
if(a==b)
{
out<<"DA";
if(par[x]!=0 && par[x]!=a)
par[x]=a;
if(par[y]!=0 && par[y]!=b)
par[y]=b;
}
else
out<<"NU";
out<<'\n';
}
int main()
{
in>>n>>m;
par.resize(n+1);
rang.resize(n+1);
for(int i=0; i<m; i++)
{
int x;
in>>x;
if(x==1)
creare();
else
verificare();
}
return 0;
}