Cod sursa(job #982634)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 9 august 2013 16:18:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,v[100001],dim[100001];

void reunion (int x,int y)
{
    int temp;

    if (dim[x]<dim[y])
    {
        temp=x;
        x=y;
        y=temp;
    }

    while (v[x]!=0) x=v[x];

    while (y!=0)
    {
        temp=v[y];
        v[y]=x;
        y=temp;
    }
}

void discern (int x,int y)
{
    while (v[x]!=0) x=v[x];
    while (v[y]!=0) y=v[y];
    if (x==y) fout<<"DA";
    else fout<<"NU";
    fout<<"\n";
}

int main()
{
    int o,x,y,i;
    fin>>n>>m;

    for (int i=1; i<=n; i++) dim[i]=1;

    for (i=1;i<=m;i++)
    {
        fin>>o>>x>>y;
        if(o==1) reunion (x,y);
        else discern (x,y);
    }
}