Pagini recente » Istoria paginii runda/oni2011-scdtry | Cod sursa (job #1852584) | Cod sursa (job #1640912) | Cod sursa (job #3129814) | Cod sursa (job #2422747)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int get_reprezentant(int nod,vector<int>&reprezentant)
{
if(nod==reprezentant[nod])
return nod;
return reprezentant[nod]=get_reprezentant(reprezentant[nod],reprezentant);
}
void uneste(int nod1,int nod2,vector<int>&reprezentant,vector<int>&adancime)
{
int rep_nod1=get_reprezentant(nod1,reprezentant);
int rep_nod2=get_reprezentant(nod2,reprezentant);
if(adancime[rep_nod1]<adancime[rep_nod2])
reprezentant[rep_nod1]=rep_nod2;
else
{
reprezentant[rep_nod2]=rep_nod1;
cout<<"da "<<rep_nod1<<" "<<rep_nod2<<endl;
if(adancime[rep_nod1]==adancime[rep_nod2])
adancime[rep_nod1]++;
}
}
int main()
{
int n,m,op,x,y,i;
f>>n>>m;
vector<int>reprezentant(n+1);
vector<int>adancime(n+1,0);
for(i=1; i<=n; i++)
reprezentant[i]=i;
for(i=1; i<=m; i++)
{
f>>op>>x>>y;
if(op==1)
uneste(x,y,reprezentant,adancime);
else if(op==2)
{
cout<<get_reprezentant(x,reprezentant)<<" "<<get_reprezentant(y,reprezentant)<<endl;
if(get_reprezentant(x,reprezentant)==get_reprezentant(y,reprezentant))
g<<"DA\n";
else
g<<"NU\n";
}
}
return 0;
}