Pagini recente » Cod sursa (job #2148936) | Cod sursa (job #1315512) | Cod sursa (job #610329) | Cod sursa (job #2042170) | Cod sursa (job #3163025)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int t[100005];
/**
t[i]= 0, daca i este rad
=j,daca j este predecesorul lui i in drumul de la i la rad
*/
int n, m, op, x, y;
//O(log* n) ->O(1)(tinde)
int FindRoot(int x){
int y, rad=x;
while(t[rad]!=0)
rad=t[rad];
///comprimarea drumului
while(x!=rad){
y=t[x];
t[x]=rad;
x=y;
}
return rad;
}
//O(1)
void Union(int x, int y){
t[y]=x;
}
int main(){
fin>>n>>m;
//O(m x log* n)
for(int i=1;i<=m;i++){
fin>>op>>x>>y;
x=FindRoot(x);
y=FindRoot(y);
if(op==1)
Union(x, y);
else
if(x==y)
fout<<"DA\n";
else fout<<"NU\n";
}
return 0;
}