Cod sursa(job #1693764)

Utilizator CrystyAngelDinu Cristian CrystyAngel Data 23 aprilie 2016 20:28:25
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

vector <int> m[100001];
int v[100001],n,o,p,a,b,i;

void unire(int a,int b)
{
    int i,j,k;
    k=m[v[b]].size();
    for(j=0;    j<k;   ++j)
        m[v[a]].push_back(m[v[b]][j]);
    j=v[b];
    for(i=0;    i<k;   ++i)
        v[m[j][i]]=v[a];

}

int main()
{
    f>>n>>o;
    for(i=1; i<=n; ++i)
    {
        v[i]=i;
        m[i].push_back(i);
    }
    for(i=1; i<=o; ++i)
    {
        f>>p>>a>>b;
        switch(p)
        {
        case 2:
            if(v[a]==v[b])
                g<<"DA\n";
            else
                g<<"NU\n";
            break;
        case 1:
            if(v[b]<v[a])
                swap(a,b);
            unire(a,b);
            break;
        }
    }
}