Cod sursa(job #2680616)

Utilizator Tudor2PopescuPopescu Tudor-Cristian Tudor2Popescu Data 3 decembrie 2020 20:01:04
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.93 kb
#include <ostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,cod,x,y,i,j,sef[100002],gr[100002],z,t,w;
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        sef[i]=i;
        gr[i]=1;
    }
    for(i=1;i<=m;i++)
    {
        fin>>cod>>x>>y;
        if(cod==1)
        {
            z=x;
            while(z!=sef[z])
            {
                z=sef[z];
            }
            t=x;
            while(t!=sef[t])
            {
                w=t;
                t=sef[t];
                sef[w]=z;
            }

            z=y;
            while(z!=sef[z])
            {
                z=sef[z];
            }
            t=y;
            while(t!=sef[t])
            {
                w=t;
                t=sef[t];
                sef[w]=z;
            }
            if(gr[sef[x]]<gr[sef[y]])
            {
                gr[sef[y]]=gr[sef[y]]+gr[sef[x]];
                sef[x]=sef[y];
            }
            else
            {
                gr[sef[x]]=gr[sef[x]]+gr[sef[y]];
                sef[y]=sef[x];
            }
        }
        else
        {
            z=x;
            while(z!=sef[z])
            {
                z=sef[z];
            }
            t=x;
            while(t!=sef[t])
            {
                w=t;
                t=sef[t];
                sef[w]=z;
            }

            z=y;
            while(z!=sef[z])
            {
                z=sef[z];
            }
            t=y;
            while(t!=sef[t])
            {
                w=t;
                t=sef[t];
                sef[w]=z;
            }
            if(sef[x]==sef[y])
            {
                fout<<"DA"<<"\n";
            }
            else
            {
                fout<<"NU\n";
            }
        }

    }
    fin.close();
    fout.close();
    return 0;
}