Pagini recente » Cod sursa (job #93342) | Cod sursa (job #1435707) | Cod sursa (job #662273) | Cod sursa (job #1276626) | Cod sursa (job #2170636)
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
struct punct{
int parinte;
int rang;
} kr[nmax];
int n,m,x,y,cod;
void make_set(){
for(int i=1;i<=n;++i){
kr[i].parinte=i;
kr[i].rang=1;
}
}
int Find(int x){
if(kr[x].parinte!=x) return Find(kr[x].parinte);
return kr[x].parinte;
}
void Union(int x, int y){
int xRoot=Find(x);
int yRoot=Find(y);
if(kr[xRoot].rang > kr[yRoot].rang){
kr[yRoot].parinte = xRoot;
kr[xRoot].rang += kr[yRoot].rang;
}
else {
kr[xRoot].parinte = yRoot;
kr[yRoot].rang += kr[xRoot].rang;
}
}
int main()
{
in>>n>>m;
make_set();
for(int i=1;i<=m;++i){
in>>cod>>x>>y;
if(cod==1) Union(x,y);
else {
if(Find(x)==Find(y)) out<<"DA"<<'\n';
else out<<"NU"<<'\n';
}
}
return 0;
}