Cod sursa(job #2427433)

Utilizator TudorChirila11Tudor Chirila TudorChirila11 Data 31 mai 2019 20:33:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
using namespace std;
int n, m, i, j, care[100005], lungime[100005], tip, x, y, m1, m2;
vector <int> v[100005];
void unite(int m1, int m2)
{
    ///pun in m1 multimea m2
    int sz=v[m2].size();
    for(int i=sz-1;i>=0;i--)
    {
        care[v[m2][i]]=m1;
        v[m1].push_back(v[m2][i]);
        v[m2].erase(v[m2].begin()+i);
        lungime[m1]++;
        lungime[m2]--;
    }
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        lungime[i]=1;
        care[i]=i;
        v[i].push_back(i);
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&tip,&x,&y);
        if(tip==1)
        {
            m1=care[x],m2=care[y];
            if(lungime[m1]>lungime[m2])
                unite(m1,m2);
            else unite(m2,m1);
            continue;
        }
        if(care[x]==care[y])
            printf("DA\n");
        else printf("NU\n");
    }
    return 0;
}