Cod sursa(job #2405425)

Utilizator eduardcadarCadar Eduard eduardcadar Data 14 aprilie 2019 14:54:34
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
#define dim 8192
#define nmax 100001
int pz;
char ax[dim];
int n, m, x, y, r, t[nmax];
void cit(int &x) {
    x = 0;
    while (ax[pz] < '0' || ax[pz] > '9'){
        if (++pz == dim) f.read(ax,dim), pz = 0;
    }
    while (ax[pz] >= '0' && ax[pz] <= '9') {
        x = x*10 + ax[pz] - '0';
        if (++pz == dim) f.read(ax,dim), pz = 0;
    }
}
int find(int i) {
    if (t[i] != i) t[i] = find(t[i]);
    return t[i];
}
void uneste(int i, int j) {
    i = find(i);
    j = find(j);
    if (i == j) return;
    t[i] = j;
}
int main()
{
    cit(n), cit(m);
    for (int i = 1; i <= n; ++i) t[i] = i;
    for (int i = 1; i <= m; ++i) {
        cit(r), cit(x), cit(y);
        if (r - 1) {
            if (find(x) - find(y)) g << "NU\n";
            else g << "DA\n";
        }
        else {
            uneste(x,y);
        }
    }
    return 0;
}