Pagini recente » Cod sursa (job #2423502) | Cod sursa (job #593727) | Cod sursa (job #2578777) | Cod sursa (job #1643741) | Cod sursa (job #2424258)
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M;
int cost_total;
vector<int> tati;
vector<int> rang;
int find(int nod) ///returnez tatal nodului nod
{
if(nod==tati[nod])
return nod;
tati[nod]=find(tati[nod]);
return tati[nod];
}
void Uniune(int x, int y)
{
x=find(x);
y=find(y);
///Unesc subarborele cu inaltimea mai mica la cel mai mare
if(rang[x]>rang[y])
{
rang[x]+=rang[y];
tati[y]=x;
}
else
{
tati[x]=y;
rang[y]+=rang[x];
}
/*if(rang[x]==rang[y])
rang[y]++; */
}
int main()
{
fin>>N>>M;
tati.resize(N+1);
for(int i=1;i<=N;i++)
tati[i]=i;
rang.resize(N+1,1);
for(int i=1;i<=M;i++)
{
int c,x,y;
fin>>c>>x>>y;
if(c==1)
Uniune(x,y);
else
{
if(find(x)==find(y))
fout<<"DA"<<endl;
else
fout<<"NU"<<endl;
}
}
}