Cod sursa(job #996914)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 12 septembrie 2013 22:03:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 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;

    int xx=x,yy=y;

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

    if (dim[x]<dim[y])
    {
        swap(x,y);
        swap(xx,yy);
    }

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

    dim[x]+=dim[yy];
    v[yy]=x;
}

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);
    }
}