Cod sursa(job #2047123)

Utilizator dragos231456Neghina Dragos dragos231456 Data 24 octombrie 2017 16:32:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <vector>
#define N 100005
#define nod vecini[add][i]
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int arb[N],tati[N],n,m,op,x,y,root,add;
vector<int> vecini[N];

void join()
{
    root=tati[x];
    add=tati[y];
    if(arb[root]<arb[add]) swap(root,add), swap(x,y);

    for(int i=0;i<vecini[add].size();++i)
    {
        vecini[root].push_back(nod);
        vecini[nod].resize(0);
        vecini[nod].push_back(root);
        tati[nod]=root;
    }

    vecini[root].push_back(add);
    vecini[add].resize(0);
    vecini[add].push_back(root);
    tati[add]=root;
}

string check()
{
    if(tati[x]==tati[y]) return "DA\n";
    return "NU\n";
}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i) arb[i]=1, tati[i]=i;
    for(int i=1;i<=m;++i)
    {
        f>>op>>x>>y;
        if(op==1) join();
        if(op==2) g<<check();
    }
    return 0;
}