Pagini recente » Cod sursa (job #1701015) | Cod sursa (job #177983) | Cod sursa (job #107691) | Cod sursa (job #1944574) | Cod sursa (job #2948371)
/*
Kruskal's Algorithm
https://www.infoarena.ro/problema/disjoint
100p
*/
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int V, E; // numarul de noduri & muchii
vector<int> parrent; // vector de tati
vector<int> h; // vector de inaltimi pentru subarbori
void Init(){
h.resize(V+1, 0);
parrent.resize(V+1, 0);
}
int Root(int u){
while(parrent[u])
u = parrent[u];
return u;
}
void Union(int u, int v){
int ru, rv; // radacina subarborelui u & radacina subarborelui v
ru = Root(u);
rv = Root(v);
if(h[ru] > h[rv])
parrent[rv] = ru;
else {
parrent[ru] = rv;
if(h[ru] == h[rv])
++h[rv];
}
}
int main() {
fin >> V >> E;
Init();
for(int i = 0; i < E; i++){
int op, u, v;
fin >> op >> u >> v;
if(op == 1){
Union(u, v);
}
else if(Root(u) != Root(v))
fout << "NU\n";
else
fout << "DA\n";
}
return 0;
}