Cod sursa(job #2162048)

Utilizator mrhammerCiocan Cosmin mrhammer Data 11 martie 2018 23:37:29
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
//ifstream fin("date.in");
//ofstream fout("date.out");
vector<int> vec;
vector<int> rang;
void make_union(int x,int y)
{
    //vec[vec[x]] = y;
    if(rang[x] > rang[y])
    {
        vec[y] = x;
    }
    else
    {
        vec[x] = y;
    }
    if(rang[x] == rang[y]) rang[y]++;
}
int cross(int x)
{
    if(vec[x] != x) vec[x] = cross(vec[x]);
    return vec[x];
}
int n,m;
int main()
{
    fin>>n>>m;
    for(int i=0;i<n;i++)
    {
        vec.push_back(i);
        rang.push_back(1);
    }
    for(int i=0;i<m;i++)
    {
        int k1,k2,k3;
        fin>>k1>>k2>>k3;
        if(k1 == 1)
        {
            make_union(k2-1,k3-1);
        }
        else
        {
            //cout<<cross(k2-1)<<" "<<cross(k3-1)<<"\n";
            if(cross(k2-1) == cross(k3-1)) fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
}