Cod sursa(job #3266732)

Utilizator dagfatiteiu david dagfa Data 10 ianuarie 2025 08:34:15
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

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

int n,m;
vector<int> a,b;
void reun(int st,int dr)
{
    while(a[st]!=st)
        st = a[st];
    while(a[dr]!=dr)
        dr = a[dr];
    if(b[st]<b[dr])
        swap(st,dr);
    a[st] = dr;
    b[st] = b[st] + b[dr];
    b[dr] = 0;
}
void afisare(int st,int dr)
{
    while(a[st]!=st)
        st = a[st];
    while(a[dr]!=dr)
        dr = a[dr];
    if(st==dr)
        g<<"DA"<<"\n";
    else g<<"NU"<<"\n";
}
void citire()
{
    f>>n>>m;
    for(int i = 0;i<=n;i++)
        a.push_back(i);
    b.resize(a.size(),1);
    for(int i = 1;i<=m;i++)
    {
        int c,st,dr;
        f>>c>>st>>dr;
        if(c==1)
            reun(st,dr);
        else
            afisare(st,dr);
    }
}
int main()
{
    citire();
}