Cod sursa(job #2369968)

Utilizator Arsene_DenisaArsene Denisa Arsene_Denisa Data 6 martie 2019 10:03:05
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include<stdio.h>

int sef[100001];

int sefsuprem(int i) {
    if(sef[i]==i)
		return i;
	else
		return sef[i]=sefsuprem(sef[i]);
}
void unire(int x, int y) {
	int sefx, sefy;
    sefx=sefsuprem(x);
    sefy=sefsuprem(y);
    sef[sefx]=sefy;
}


using namespace std;

int main() {
    FILE *fin, *fout;
    int n, m, in, xx, yy, w, j;

    fin=fopen("disjoint.in","r");
    fout=fopen("disjoint.out", "w");
    fscanf(fin, "%d %d", &n, &m);
    for(w=1;w<=n;w++) {
            sef[w]=w;
    }
    for(w=1;w<=m;w++) {
            fscanf( fin, "%d %d %d", &in, &xx, &yy);
    if(in==1) {
            unire(xx, yy);
    }
    else {
    if(sefsuprem(xx)==sefsuprem(yy)) {
            fprintf( fout, "DA\n");
    }
    else {
            fprintf( fout, "NU\n");
    }
    }
    }
    fclose( fin );
    fclose( fout );
    return 0;
}