Cod sursa(job #2766404)

Utilizator NeuerRaducu Ioan Stefan Neuer Data 1 august 2021 12:22:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
///#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int n, m;
vector <int> v, weight;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

int findRoot(int nod)
{
    while(v[nod]!=nod) nod=v[nod];
    return nod;
}

void query1(int y, int x)
{
    int root1=findRoot(y), root2=findRoot(x);
    if(weight[root2]>weight[root1])
        swap(root1, root2);
    v[root2]=root1;
    weight[root1]+=weight[root2];
}

void query2(int y, int x)
{
    if(findRoot(y)==findRoot(x)) cout<<"DA";
    else cout<<"NU";
    cout<<'\n';
}

void readit()
{
    int qry, y, x;
    cin>>n>>m;
    v.resize(n+1);
    weight.resize(n+1);
    for(int i=1; i<v.size(); i++) v[i]=i, weight[i]=1;
    for(int i=1; i<=m; i++)
    {
        cin>>qry>>y>>x;
        if(qry==1) query1(y, x);
        else query2(y, x);
    }
}

int main()
{
    readit();

    return 0;
}