Pagini recente » Cod sursa (job #1545077) | Cod sursa (job #2900396) | Cod sursa (job #1470301) | Cod sursa (job #1793140) | Cod sursa (job #2422924)
//
// Created by Cristian Stern on 5/20/2019.
//
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void unite(int x, int y, vector <int > &T, vector < int > &R){
if(R[x] > R[y])
T[y] = x;
else T[x] = y;
if(R[x] == R[y]){
R[y]++;
}
}
int find(int x, vector <int> &T){
int y, R;
for(R = x;R != T[R];R = T[R]);
while(x != T[x]){
y = T[x];
T[x] = R;
x = y;
}
return R;
}
int main(){
int n, m, x, y, z;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
//ifstream f("E:\\FMI\\AG\\lab3\\date.in");
//ofstream g("E:\\FMI\\AG\\lab3\\date.out");
f>>n>>m;
vector < int > TT(n);
vector < int > RG(n);
for(int i = 0;i < n;i++){
TT[i] = i;
RG[i] = 1;
}
for(int i = 0;i < m;i++){
f>>z>>y>>x;
y--;
x--;
if(z == 2){
if(find(x, TT) == find(y, TT))
g<<"DA\n";
else g<<"NU\n";
}
else unite(find(x,TT), find(y,TT), TT, RG);
}
}