Pagini recente » Cod sursa (job #1566132) | Cod sursa (job #1063891) | Cod sursa (job #1651452) | Cod sursa (job #1035598) | Cod sursa (job #2493647)
#include <bits/stdc++.h>
#define MAX 131072
using namespace std;
const int NMAX = 100010;
FILE *IN;
int N, M;
int comp[NMAX], Size[NMAX];
int pos, sign;
char f[MAX];
inline void Read(int &nr){
sign = 0;
nr = 0;
while(f[pos] < '0' || f[pos] > '9'){
if(f[pos] == '-') sign = 1;
pos++;
if(pos == MAX)
fread(f, MAX, 1, IN), pos = 0;
}
while(f[pos] >= '0' && f[pos] <= '9'){
nr = 10 * nr + f[pos++] - '0';
if(pos == MAX)
fread(f, MAX, 1, IN), pos = 0;
}
if(sign) nr =- nr;
}
int Find(int x){
while(comp[x] != x)
x = comp[x];
return x;
}
void Union(int x, int y){
x = Find(x);
y = Find(y);
if(Size[x] > Size[y])
Size[x] += Size[y], comp[y] = x;
else Size[y] += Size[x], comp[x] = y;
}
int main(){
IN = fopen("disjoint.in", "r");
freopen("disjoint.out", "w", stdout);
Read(N); Read(M);
for(int i = 1; i <= N; i++)
comp[i] = i, Size[i] = 1;
int tip, x, y;
for(int i = 1; i <= M; i++){
Read(tip); Read(x); Read(y);
if(tip == 1)
Union(x, y);
else{
if(Find(x) == Find(y))
printf("DA\n");
else printf("NU\n");
}
}
return 0;
}