Cod sursa(job #1505413)

Utilizator sabauandrei98Sabau Andrei sabauandrei98 Data 19 octombrie 2015 09:35:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <limits.h>
#include <cmath>
#include <string>
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <map>
#include <fstream>
#include <list>
#include <queue>
#include <iomanip>
#include <deque>
#include <set>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int T[100001];

int caut(int x)
{
    int y = x;
    while(T[x] != x)
        x = T[x];
    T[y] = x;
    return x;
}

int unesc(int a, int b)
{
    int x = caut(a);
    int y = caut(b);
    T[x] = y;
}


int main()
{
    int n,m;
    f >> n >> m;

    for(int i = 1; i<=n; i++)
        T[i] = i;

    for(int i = 1; i<=m; i++)
    {
        int x,y,z;
        f >> x >> y >> z;

            if (x == 1)
                unesc(y,z);

            if (x == 2)
                if (caut(y) == caut(z))
                    g<<"DA"<<'\n';
            else
                    g<<"NU"<<'\n';
    }

    return 0;
}