Pagini recente » Cod sursa (job #194599) | Cod sursa (job #2889347) | Cod sursa (job #236939) | Cod sursa (job #443069) | Cod sursa (job #2117727)
#include<cstdio>
#include<vector>
using namespace std;
#define NMAX 100005
int point[NMAX];
int gaseste(int nod)
{
if(point[nod]==nod)
return nod;
else{
point[nod] = gaseste( point[nod] );
return point[nod];
}
}
void unite(int a, int b)
{
int capa = gaseste( a );
int capb = gaseste( b );
if(capa != capb){
if(capa >= capb){
point[capb]=capa;
}
else{
point[capa]=capb;
}
}
}
int main()
{
FILE *fin, *fout;
fin = fopen("disjoint.in", "r");
fout = fopen("disjoint.out", "w");
///declarare
int n, k, i, a, b, j;
///citire
fscanf(fin, "%d%d", &n, &k);
///umplere
for(i=1; i<=n; i++)
point[i]=i;
///implementare
for(i=1; i<=k; i++)
{
fscanf(fin, "%d", &j);
if( j==1 ){
fscanf(fin, "%d%d", &a, &b);
unite(a, b);
}
else{
fscanf(fin, "%d%d", &a, &b);
point[a] = gaseste( a );
point[b] = gaseste( b );
if(point[a]==point[b])
fprintf(fout, "DA\n");
else fprintf(fout, "NU\n");
}
}
///end
fclose( fin );
fclose( fout );
return 0;
}