Pagini recente » Cod sursa (job #1467239) | Cod sursa (job #2531453) | Cod sursa (job #1596570) | Cod sursa (job #303390) | Cod sursa (job #2037945)
#include <bits/stdc++.h>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int parinti[100001];
int elem[100001];
int root(int n){
while (parinti[n]!=0)
n = parinti[n];
return n;
}
void mut(int r, int n){
if(n==r)
return;
if (parinti[n]!=r)
mut(r, parinti[n]);
parinti[n]=r;
}
void q1(int n1, int n2){
if (elem[n1]<elem[n2]) swap(n1, n2);
int r1 = root(n1);
int r2 = root(n2);
parinti[r2] = r1;
elem[r1]+=elem[r2];
}
void q2(int n1, int n2){
int r1=root(n1);
int r2=root(n2);
if (r1 == r2)
out << "DA\n";
else
out << "NU\n";
mut (r1, n1);
mut (r2, n2);
}
int main(){
int n, m, i, t, n1, n2;
in >> n >> m;
for (i=1; i<=n; i++)
elem[i] = 1;
for (i=1; i<=m; i++){
in >> t >> n1 >> n2;
if (t == 1)
q1(n1, n2);
else
q2(n1, n2);
}
}