Mai intai trebuie sa te autentifici.
Cod sursa(job #1803474)
| Utilizator | Data | 11 noiembrie 2016 15:25:29 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.79 kb |
#include <stdio.h>
using namespace std;
FILE *fin = fopen("disjoint.in" , "r");
FILE *fout = fopen("disjoint.out" , "w");
int n, tata[100001], q,tip ,x ,y;
int finder(int x)
{
if(tata[x]==x) return x;
else
{
tata[x] = finder(tata[x]);
finder(tata[x]);
}
}
void uniune(int x, int y)
{
int j = finder(y);
tata[x]=j;
tata[y]=j;
}
int main()
{
fscanf(fin , "%d" , &n);
for(int i=1; i<=n;i++)
{
tata[i]=i;
}
fscanf(fin , "%d", &q);
for(int i=1; i<=q; i++)
{
fscanf(fin , "%d%d%d", &tip, &x,&y);
if(tip == 1)uniune(x,y);
else
{
if(tata[x]==tata[y]) fprintf(fout , "DA\n");
else fprintf(fout, "NU\n");
}
}
return 0;
}
