Pagini recente » Cod sursa (job #2418098) | Cod sursa (job #92235) | Cod sursa (job #1402624) | Cod sursa (job #1629617) | Cod sursa (job #1733158)
#include <iostream>
#include <fstream>
#define NMAX 100010
using namespace std;
int TT[NMAX],G[NMAX];
void uneste(int x,int y){
if(G[x] > G[y])
TT[y]=x;
else TT[x]=y;
if(G[x] == G[y])
G[y]++;
}
int find(int x){
int y,R;
for(R=x;TT[R]!=R;R=TT[R]);
for(;TT[x]!=x;){//Compress
y=TT[x];
TT[x]=R;
x=y;
}
return R;
}
int main()
{
int n,m,op,op1,op2;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f >> n >> m;
for(int i=1;i<=n;i++){
TT[i]=i;
G[i]=1;
}
for(int i=1;i<=m;i++){
f >> op >> op1 >> op2;
if(op == 1) uneste(op1,op2);
else if(find(op1) == find(op2)) g << "DA" << '\n';
else g << "NU" << '\n';
}
return 0;
}