Pagini recente » Monitorul de evaluare | Cod sursa (job #480392) | Cod sursa (job #3317575) | Cod sursa (job #2009586) | Cod sursa (job #3317573)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
vector<int> parinte;
vector<int> rank;
void initializare(int n){
parinte.resize(n+1);
rank.resize(n+1,0);
for (int i=0;i<n;i++)
parinte[i]=i;
}
int find_radacina(int i){
if(parent[i]==i)
return i;
return parent[i]=find_radacina(parent[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(rank[x]<rank[y])
{
parinte[radacina_x]=radacina_y;
}
else if(rank[y]>rank[x]){
parinte[radacina_y]=radacina_x;
}
else{
parinte[radacina_x]=radacina_y;
rank[y]++;
}
}
}
int main()
{
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";
else
g<<"NU";
}
}
f.close();
g.close();
return 0;
}