Pagini recente » Cod sursa (job #2069486) | Cod sursa (job #2280977) | Cod sursa (job #2390230) | Cod sursa (job #443743) | Cod sursa (job #2816603)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#include <bits/stdc++.h>
#include <tuple>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
class graf{
private:
int n,m;
vector<int> parinte;
vector<int>dimensiune;
public:
int radacina_disjuncte(int n);
void uniune_disjuncte(int x,int y);
bool aceeasi_padure(int x, int y);
void disjuncte();
graf(int n);
graf(int n, int m);
};
graf::graf(int n, int m)
{
this->n=n;
this->m=m;
}
int graf:: radacina_disjuncte(int n){
while(n!=parinte[n]){
n=parinte[n];
}
return n;
}
void graf::uniune_disjuncte(int x, int y){
if (radacina_disjuncte(x)!=radacina_disjuncte(y))
{ if(dimensiune[x]>dimensiune[y])
{parinte[radacina_disjuncte(y)]=radacina_disjuncte(x);
dimensiune[x] += dimensiune[y];}
else
{parinte[radacina_disjuncte(x)]=radacina_disjuncte(y);
dimensiune[y] += dimensiune[x];}
}
}
void graf::disjuncte(){
int n,m, comanda,x ,y;
f>>n>>m;
vector<int>parinte;
vector<int>dimensiune;
for ( int i = 1; i <= n; i++ )
{parinte[i] = i;
dimensiune[i]=1;}
for(int i=1;i<m;i++){
f>>comanda>>x>>y;
if (comanda==1)
uniune_disjuncte( x, y);
else if(comanda==2)
{if(radacina_disjuncte(x)==radacina_disjuncte(y))
g<<"Da";
else g<<"nu"; }}
}
/*
bool graf::aceeasi_padure(int x, int y){
if (radacina_disjuncte(x)==radacina_disjuncte(y))
return true;
return false;
}*/
int main(){
int n,m;
f>>n>>m;
graf G(n,m);
G.disjuncte();
return 0;
}