Mai intai trebuie sa te autentifici.
Cod sursa(job #2408844)
Utilizator | Data | 18 aprilie 2019 13:18:18 | |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.18 kb |
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
int tata[100001];
int grad[100001];
int n,m;
int find_father(int node)
{
if(tata[node] == node)
return node;
tata[node] = find_father(tata[node]);
return tata[node];
}
void Read()
{
int cod,x,y;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f >> n >> m;
for(int i=1;i<=n;i++)
{
tata[i] = i;
grad[i] = 1;
}
for(int i=1;i<=m;i++)
{
f >> cod >> x >> y;
int A = find_father(x);
int B = find_father(y);
if(cod == 1)
{
if(A != B)
{
if(grad[A] < grad[B])
{
tata[A] = B;
grad[B] += grad[A];
}
else
{
tata[B] = A;
grad[A] += grad[B];
}
}
}
else
{
if(A == B)
g << "DA\n";
else
g << "NU\n";
}
}
}
int main()
{
Read();
return 0;
}