Pagini recente » Cod sursa (job #1946678) | Cod sursa (job #549229) | Cod sursa (job #1049022) | Cod sursa (job #1374309) | Cod sursa (job #1993454)
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int boss[100005];
int card[100005];
int stramos (int nod){
int superboss = nod ;
while (superboss != boss [superboss]) {
superboss = boss [superboss] ;
}
while (nod != boss [nod]) {
int aux = boss [nod] ;
boss [nod] = superboss ;
nod = aux ;
}
return superboss;
}
void unite (int a, int b){
if (card[boss[stramos(a)]] > card[boss[stramos(b)]]){
int old1=card[boss[b]];
boss[b]=boss[a];
card[boss[a]]+=old1;
}
else{
int old2=card[boss[a]];
boss[a]=boss[b];
card[boss[b]]+=old2;
}
}
int main()
{
int n,m;
cin>>n>>m;
for (int i=1; i<=n; i++){
boss[i]=i;
card[i]=1;
}
for (int i=1; i<=m; i++){
int x,a,b;
cin>>x>>a>>b;
if (x==1){
unite (a, b);
}
if (x==2){
if (stramos(a) == stramos(b)){
cout<<"DA"<<'\n';
}
else{
cout<<"NU"<<'\n';
}
}
}
return 0;
}