Pagini recente » Cod sursa (job #263617) | Cod sursa (job #3216734) | Cod sursa (job #2986672) | Cod sursa (job #750371) | Cod sursa (job #2697321)
#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;
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;
if(rang[y]==0 && rang[x]==0)
par[y]=x,rang[x]=2,rang[y]=1;
else
{
int a=rad(x),b=rad(y);
if(rang[a]<rang[b])
parintare(a,y);
else
par[a]=b;
}
}
void verificare()
{
int x,y;
in>>x>>y;
if(rad(x)==rad(y))
out<<"DA";
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;
}