Cod sursa(job #1392622)
| Utilizator | Data | 18 martie 2015 19:36:34 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.92 kb |
#include <cstdio>
#define nmax 100005
using namespace std;
int sef[nmax];
int main()
{
FILE *in, *out;
in=fopen("disjoint.in", "r");
out=fopen("disjoint.out", "w");
int n, m, n1, n2, x, x1;
short v;
fscanf(in, "%d%d", &n, &m);
while(m)
{
fscanf(in, "%hd%d%d", &v, &n1, &n2);
if(v==1)
{
x=n1;
while(sef[x]!=0)
x=sef[x];
x1=n2;
while(sef[x1]!=0)
x1=sef[x1];
sef[x1]=x;
}
else
{
x=n1;
while(sef[x]!=0)
x=sef[x];
x1=n2;
while(sef[x1]!=0)
x1=sef[x1];
if(x==x1)
fprintf(out, "DA\n");
else
fprintf(out, "NU\n");
}
m--;
}
fclose(in);
fclose(out);
return 0;
}
