Cod sursa(job #1542476)

Utilizator sabauandrei98Sabau Andrei sabauandrei98 Data 5 decembrie 2015 13:42:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int tata[100005];

int find(int x)
{
    int t;
    for(t = x; tata[t] != t; t = tata[t]);

    for(int i = x; i != t; )
    {
        int a = tata[i];
        tata[i] = t;
        i = a;
    }
    return t;
}

int unesc(int x,int y)
{
    int tx = find(x);
    int ty = find(y);
    tata[ty] = tx;
}

void query(int x, int y)
{
    if (find(x) == find(y))
        g<<"DA"<<'\n';
    else
        g<<"NU"<<'\n';
}

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

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

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

        if (type == 1)
            unesc(x,y);
        else
            query(x,y);
    }


    return 0;
}