Pagini recente » Cod sursa (job #2213019) | Cod sursa (job #1353531) | Cod sursa (job #1444840) | Monitorul de evaluare | Cod sursa (job #2952356)
/*
#include <iostream>
#include <vector>
using namespace std;//Complexitate o(n*logn)
vector<vector<int>>multime;
vector<int>inCeMultimeSunt;
void rezolva(int a,int b,int operatie){
if(operatie==1){
int x=inCeMultimeSunt[a];
int y=inCeMultimeSunt[b];
if(multime[x].size()>multime[y].size()){
for(auto&elemente:multime[y]){
multime[x].push_back(elemente);
inCeMultimeSunt[elemente]=x;
}
multime[y].clear();
}else{
for(auto&elemente:multime[x]){
multime[y].push_back(elemente);
inCeMultimeSunt[elemente]=y;
}
multime[x].clear();
}
}else{
int x=inCeMultimeSunt[a];
int y=inCeMultimeSunt[b];
if(x==y){
cout<<"DA"<<'\n';
}else{
cout<<"NU"<<'\n';
}
}
}
int main()
{
int n,m;
cin>>n>>m;
multime.resize(n+1);
inCeMultimeSunt.resize(n+1);
for(int i=1;i<=n;i++){
multime[i].push_back(i);
inCeMultimeSunt[i]=i;
}
for(int i=1;i<=m;i++){
int operatie,a,b;
cin>>operatie>>a>>b;
rezolva(a,b,operatie);
}
return 0;
}
*/
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
vector<int>radacina;
vector<int>lungimeArbore;
int gasesteRadacina(int nod){
if(radacina[nod]!=nod){
radacina[nod]=gasesteRadacina(radacina[nod]);
}
return radacina[nod];
}
void creeazaArboreFinal(int a,int b,int operatie)
{
if(operatie==1)
{
int x=gasesteRadacina(a);
int y=gasesteRadacina(b);
if(lungimeArbore[x]>lungimeArbore[y])
{ radacina[y]=radacina[x];
lungimeArbore[x]+=lungimeArbore[y];
lungimeArbore[y]=0;
}
else
{ radacina[x]=radacina[y];
lungimeArbore[y]+=lungimeArbore[x];
lungimeArbore[x]=0;
}
}else{
int x=gasesteRadacina(a);
int y=gasesteRadacina(b);
if(radacina[x]==radacina[y]){
cout<<"DA"<<'\n';
}else{
cout<<"NU"<<'\n';
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n,m;
cin>>n>>m;
radacina.resize(n+1);
lungimeArbore.resize(n+1);
for(int i=1; i<=n; i++)
{
radacina[i]=i;
lungimeArbore[i]=1;
}
for(int j=1; j<=m; j++)
{
int operatie,a,b;
cin>>operatie>>a>>b;
creeazaArboreFinal(a,b,operatie);
}
}