Pagini recente » Cod sursa (job #2845698) | Cod sursa (job #651253) | Cod sursa (job #995305) | Cod sursa (job #1003271) | Cod sursa (job #2390617)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int reprezentant(int a,vector<int>&parinte)
{
if(a==parinte[a])
return a;
return reprezentant(parinte[a],parinte);
}
bool verifica(int a,int b,vector<int>&parinte)
{
return reprezentant(a,parinte)!=reprezentant(b,parinte);
}
void uneste(int a,int b,vector<int>&adancime,vector<int>&parinte)
{
int repa=reprezentant(a,parinte);
int repb=reprezentant(b,parinte);
if(adancime[repa]<adancime[repb])
parinte[repa]=repb;
else
parinte[repb]=repa;
if(adancime[repa]==adancime[repb])
adancime[repa]++;
}
int main()
{
int n,m,i,cod,x,y;
f>>n>>m;
vector<int>parinte(n+1);
vector<int>adancime(n+1,0);
for(i=0; i<=n; i++)
parinte[i]=i;
for(i=1; i<=m; i++)
{
f>>cod>>x>>y;
if(cod==1)
{
if(verifica(x,y,parinte))
uneste(x,y,adancime,parinte);
else
g<<"Nu fac parte din multimi disjuncte!\n";
}
else if(reprezentant(x,parinte)==reprezentant(y,parinte))
g<<"DA\n";
else
g<<"NU\n";
}
return 0;
}