Pagini recente » Cod sursa (job #1719251) | Cod sursa (job #2951764) | Cod sursa (job #1780366) | Cod sursa (job #1020854) | Cod sursa (job #2445334)
// Matteo Verzotti - C++
#include <iostream><
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <ctime>
#include <map>
#include <chrono>
#include <cmath>
#define INF 0x3f3f3f3f
#define MAX(a,b) a>b ? a:b
#define MIN(a,b) a<b ? a:b
using namespace std;
const int NMAX = 100000;
int parent[5 + NMAX];
int szg[5 + NMAX];
int n, m;
int FIND(int x)
{
int y;
for(y = x; parent[y] != y; y = parent[y]); // atat timp cat nu sunt la radacina
// aplic compresia drumurilor
for(; parent[x] != x;){
int cx = parent[x];
parent[x] = y;
x = cx;
}
return y;
}
void unite(int x,int y)
{
if(szg[x] > szg[y]){
parent[y] = x;
szg[x] += szg[y];
szg[y] = szg[x];
}
else{
parent[x] = y;
szg[y] += szg[x];
szg[x] = szg[y];
}
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++){
parent[i] = i;
szg[i] = 1;
}
for(int i=1; i<=m; i++){
int p, a, b;
scanf("%d%d%d", &p, &a, &b);
if(p == 1){
unite(FIND(a),FIND(b));
} else{
if(FIND(a) == FIND(b)) printf("DA\n");
else printf("NU\n");
}
}
/*for(int i=1; i<=n; i++){
int p = parent[i];
printf("%d\n",szg[p]);
}*/
return 0;
}