Pagini recente » Cod sursa (job #3307334) | Cod sursa (job #847609) | Cod sursa (job #287230) | Cod sursa (job #2446293) | Cod sursa (job #3317577)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
vector<int> parinte;
vector<int> rang;
void initializare(int n){
parinte.resize(n+1);
rang.resize(n+1,0);
for (int i=0;i<n;i++)
parinte[i]=i;
}
int find_radacina(int i){
if(parinte[i]==i)
return i;
return parinte[i]=find_radacina(parinte[i]);
}
void unire(int x, int y)
{
int radacina_x=find_radacina(x);
int radacina_y=find_radacina(y);
if(radacina_x!=radacina_y)
{
if(rang[x]<rang[y])
{
parinte[radacina_x]=radacina_y;
}
else if(rang[y]>rang[x]){
parinte[radacina_y]=radacina_x;
}
else{
parinte[radacina_x]=radacina_y;
rang[y]++;
}
}
}
int main()
{
int n,m,cod,x,y;
f>>n>>m;
initializare(n);
for(int i=0;i<m;i++)
{
f>>cod>>x>>y;
if(cod==1)
{
unire(x,y);
}
else if(cod==2)
{
if(find_radacina(x)==find_radacina(y))
g<<"DA\n";
else
g<<"NU\n";
}
}
f.close();
g.close();
return 0;
}