Cod sursa(job #2042856)
| Utilizator | Data | 19 octombrie 2017 12:06:28 | |
|---|---|---|---|
| Problema | Paduri de multimi disjuncte | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.57 kb |
#include <fstream>
std::ifstream fi("disjoint.in");
std::ofstream fo("disjoint.out");
int parent[100005];
int N, M;
int k, x, y;
int check(int node)
{
if(parent[node] == node) return node;
else return parent[node] = check(parent[node]);
}
void unite(int x, int y)
{
parent[check(x)] = check(y);
}
int main()
{
fi>>N>>M;
for(int i=1; i<=N; ++i) parent[i] = i;
for(int i=1; i<=M; ++i)
{
fi>>k>>x>>y;
if(k==1) unite(x,y);
else if(check(x) == check(y)) fo<<"DA\n";
else fo<<"NU\n";
}
}
