Pagini recente » Cod sursa (job #1546670) | Cod sursa (job #962821) | Profil nikomiu95 | Cod sursa (job #1679798) | Cod sursa (job #2423933)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int reprezentant (int x,vector<int>&repr)
{
if (x==repr[x])
return x;
else
return repr[x]=reprezentant(repr[x],repr);
}
void reuneste(int x,int y,vector<int>&repr,vector<int>&adancime)
{
int rep_x=reprezentant(x,repr);
int rep_y=reprezentant(y,repr);
if (adancime[rep_x]<adancime[rep_y])
repr[rep_x]=rep_y;
else
repr[rep_y]=rep_x;
if (adancime[rep_x]==adancime[rep_y])
adancime[rep_x]++;
}
bool verifica (int x,int y,vector<int>&repr)
{
return reprezentant(x,repr)==reprezentant(y,repr);
}
int main()
{
int n,m,x,y,cod;
f>>n>>m;
vector<int>repr(n+1);
vector<int>adancime(n+1,0);
for (int i=1; i<=n; i++)
repr[i]=i;
for (int i=0; i<m; i++)
{
f>>cod>>x>>y;
if (cod==1)
reuneste(x,y,repr,adancime);
else if (cod==2)
{
if (verifica(x,y,repr))
g<<"DA\n";
else
g<<"NU\n";
}
}
}