Pagini recente » Cod sursa (job #955919) | Cod sursa (job #3174039) | Cod sursa (job #1808290) | Cod sursa (job #359884) | Cod sursa (job #1627235)
#include<stdio.h>
#include<algorithm>
#define DIM 100005
FILE *f=fopen("disjoint.in","r"), *g=fopen("disjoint.out","w");
using namespace std;
int N, M, T[DIM], H[DIM], A, B, C; // T = tatii, H = inaltimile
void Uneste( int x, int y ){
int Tx, Ty;
Tx = x;
while( T[Tx] != 0 )
Tx = T[Tx];
Ty = y;
while( T[Ty] != 0 )
Ty = T[Ty];
if( H[Tx] >= H[Ty] ){ // Lipim Ty la Tx
T[Ty] = Tx;
if( H[Tx] == H[Ty] ) // Cand au inaltimi egale, lipind h se mareste cu 1
H[Tx]++;
}
else // Lipim Tx la Ty
T[Tx] = Ty;
}
void Intreaba( int x, int y ){
int Tx, Ty, newTx, newTy;
Tx = x;
while( T[Tx] != 0 )
Tx = T[Tx];
Ty = y;
while( T[Ty] != 0 )
Ty = T[Ty];
if( Tx == Ty )
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
// EURISTICA 2
newTx = Tx;
newTy = Ty;
Tx = x;
while( T[Tx] != 0 ){
T[Tx] = newTx;
Tx = T[Tx];
}
H[newTx] = 1;
Ty = y;
while( T[Ty] != 0 ){
T[Ty] = newTy;
Ty = T[Ty];
}
H[newTy] = 1;
}
int main(){
fscanf(f,"%d %d\n",&N,&M);
for(int i=1;i<=M;i++){
fscanf(f,"%d %d %d\n",&A,&B,&C);
if( A == 1 )
Uneste(B,C);
else
Intreaba(B,C);
}
return 0;
}