Cod sursa(job #1605831)

Utilizator ruxi.icleanuRuxandra Icleanu ruxi.icleanu Data 19 februarie 2016 15:36:10
Problema Paduri de multimi disjuncte Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <vector>

using namespace std;

vector <int> v[100001];
int vec[100001];

int main()
{
    int n, m, i, cod, x, y, p;
    FILE *fi, *fo;
    fi = fopen("disjoint.in", "r");
    fo = fopen("disjoint.out", "w");
    fscanf(fi, "%d%d", &n, &m);
    for(i=1; i<=n; i++) {
        vec[i]=i;
        v[i].push_back(i);
    }
    for(p=1; p<=m; p++) {
        fscanf(fi, "%d%d%d", &cod, &x, &y);
        if(cod==1) {
            for(i=v[vec[y]].size()-1; i>=0; i--) {
                vec[v[vec[y]][i]]=vec[x];
                v[vec[x]].push_back(v[vec[y]][i]);
                v[vec[y]].pop_back();
            }
        }
        else {
            while(vec[vec[x]]!=x)
                x=vec[x];
            while(vec[vec[y]]!=y)
                y=vec[y];
            if(x==y)
                fprintf(fo, "DA\n");
            else
                fprintf(fo, "NU\n");
        }
    }
    fclose(fi);
    fclose(fo);
    return 0;
}