Pagini recente » Cod sursa (job #3198660) | Cod sursa (job #2137290) | Cod sursa (job #1121372) | Cod sursa (job #2191192) | Cod sursa (job #742350)
Cod sursa(job #742350)
/*
* main.cpp
*
* Created on: 29 Apr 2012
* Author: Iovan Alexandru
*/
#include <fstream>
#define NMax 100001
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
void Union(int x,int y,int *tata,int *H){
if(H[x]>H[y]) tata[y]=x;
else{
tata[x]=y;
if(H[x]==H[y]) H[y]++;
}
}
int Find(int x, int *tata){
int r=x;
//determin radacina arborelui
while(tata[r]) r=tata[r];
int y=x,t;
//comprim drumul de la x la radacina
while(y!=r){
t=tata[y];
tata[y]=r;
y=t;
}
return r;
}
void initializare(int *tata,int *h,int n){
for(int i=1;i<=n;i++){
h[i]=0;
tata[i]=0;
}
}
void rezolva(int *tata,int *h,int m){
int cod,x,y;
for(int i=0;i<m;i++){
fin>>cod>>x>>y;
if(cod==1){
x=Find(x,tata);
y=Find(y,tata);
Union(x,y,tata,h);
}
if(cod==2){
fout<<(Find(x,tata)==Find(y,tata)?"DA\n":"NU\n");
}
}
}
int main(){
int h[NMax];
int tata[NMax];
int n,m;
fin>>n>>m;
initializare(tata,h,n);
rezolva(tata,h,m);
}