Cod sursa(job #1387158)

Utilizator BogdanisarBurcea Bogdan Madalin Bogdanisar Data 13 martie 2015 19:32:52
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.64 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int N,M,i,j,tip,x,yst,yfn,temp;
int a[100005][3];

void initializare();

int main()
{
    f>>N>>M;
    initializare();
    for (int cont1=0;cont1<M;++cont1)
    {
        f>>tip>>x>>yst;
        if (x>yst)
            swap(x,yst);
        switch (tip)
        {
            case 1:
            {
                while (a[yst][1]!=0)
                    yst=a[yst][1];
                i=x;
                temp=0;
                while (a[i][1]!=0)
                {
                    temp=i;
                    a[i][0]=a[yfn][0];
                    i=a[i][1];
                }
                a[i][0]=a[yfn][0];
                if (temp!=0)
                    a[i][2]=temp;
                i=x;
                while (a[i][2]!=0)
                {
                    a[i][0]=a[yfn][0];
                    i=a[i][2];
                }
                a[i][0]=a[yfn][0];
                a[i][2]=yst;
                a[yst][1]=i;
                /*for (i=1;i<=N;++i)
                {
                    for (j=0;j<3;++j)
                        cout<<a[i][j]<<' ';
                    cout<<'\n';
                }
                cout<<"\n\n";*/
                break;
            }
            case 2:
            {
                if (a[x][0]==a[yst][0])
                    g<<"DA"<<'\n';
                else
                    g<<"NU"<<'\n';
            }
        }
    }
    f.close();g.close();
    return 0;
}

void initializare()
{
    for (i=1;i<=N;++i)
        a[i][0]=i;
}