Cod sursa(job #1455442)

Utilizator ggokGeri Gokaj ggok Data 27 iunie 2015 23:42:15
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
using namespace std;
int N,p[100000],sz[100000],V,E,op,num1,num2;
int findset(int x)
{
    int f=x;
    while(x!=p[x])
        x=p[x];
    p[f]=x;
    return x;
}
bool issameset(int x,int y)
{
    int f=findset(x);
    int g=findset(y);
    if(f==g)
        return true;
    return false;
}
void uni(int x,int y)
{
    int f=findset(x);
    int g=findset(y);
    if(f==g)
        return;
    if(sz[f]>sz[g])
        p[g]=f,sz[f]+=sz[g];
    else
        p[f]=g,sz[g]+=sz[f];
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
  freopen("disjoint.in","r",stdin);
  freopen("disjoint.out","w",stdout);
    cin>>V;
    for(int i=1;i<=V;i++)
        p[i]=i,sz[i]=1;
        cin>>E;
        while(E--)
        {
            cin>>op>>num1>>num2;
            if(op==1)
                uni(num1,num2);
            if(op==2)
                if(issameset(num1,num2))
                cout<<"DA\n";
            else
                cout<<"NU\n";

        }
    return 0;
}