Cod sursa(job #1605817)

Utilizator lauratalaatlaura talaat lauratalaat Data 19 februarie 2016 15:28:31
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <vector>
#include <fstream>
#include<stdio.h>
using namespace std;
vector <int> v[100001];
 int vec[100001];
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int x, y, n, m, i, j;

    int op;
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; i++)
    { vec[i]=i;
      v[i].push_back(i);
    }
    for(j=1; j<=m; j++)
    {
     scanf("%d%d%d",&op,&x,&y);
     if(op==1) //reuniune
     {
        if(v[vec[x]].size()>=v[vec[y]].size()){
            {int c=vec[y];
            for(i=v[c].size()-1; i>=0; i--)
                {vec[v[c][i]]=x;
                v[vec[x]].push_back(v[c][i]);
                v[c].pop_back();
                }
            }
        }
        else
            {int c=vec[x];
            for(i=v[c].size()-1; i>=0; i--)
                {vec[v[c][i]]=y;
                v[vec[y]].push_back(v[c][i]);
                v[c].pop_back();
                }
            }
     }
     else{ //da sau nu
        if(vec[x]==vec[y])
            printf("DA\n");
        else
            printf("NU\n");
     }
    }
    return 0;
}