Cod sursa(job #2555133)

Utilizator Dragono63Stanciu Rares Stefan Dragono63 Data 23 februarie 2020 18:49:13
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.95 kb
#include <bits/stdc++.h>

using namespace std;
/************************************************/
const int nmax=100004;
int par[nmax];
int nr[nmax];
int n,m,aux;
/************************************************/
ifstream f("disjoint.in");
ofstream g("disjoint.out");
/************************************************/
///--------------------------------------------------------
inline void readInput()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
    {
        par[i]=i;
        nr[i]=1;
    }
}
///--------------------------------------------------------
void uneste(int x, int y)
{
    int x2=x;
    int y2=y;
    while(x2!=par[x2])
    {
        x2=par[x2];
    }
    while(y2!=par[y2])
    {
        y2=par[y2];
    }
    if(nr[x2]<nr[y2])
    {
        swap(x,y);
        swap(x2,y2);
    }
    if(x2!=y2)
    {
        nr[x2]+=nr[y2];
        par[y2]=x2;
    }
    while(x!=x2)
    {
        int aux=par[x];
        par[x]=x2;
        x=aux;
    }
    while(y!=x2)
    {
        int aux=par[y];
        par[y]=x2;
        y=aux;
    }
}
///--------------------------------------------------------
void Parinte(int x, int y)
{
    int x2=x;
    int y2=y;
    while(x2!=par[x2])
    {
        x2=par[x2];
    }
    while(y2!=par[y2])
    {
        y2=par[y2];
    }
    if(par[x2]==par[y2])
    {
        g<<"DA"<<"\n";
    }
    else
    {
        g<<"NU"<<"\n";
    }
    while(x!=x2)
    {
        int aux=par[x];
        par[x]=x2;
        x=aux;
    }
    while(y!=y2)
    {
        int aux=par[y];
        par[y]=y2;
        y=aux;
    }
}
///--------------------------------------------------------
inline void Solution()
{
    for(int i=1;i<=m;i++)
    {
        int p,x,y;
        f>>p>>x>>y;
        if(p==1) uneste(x,y);
        else Parinte(x,y);
    }
}
///--------------------------------------------------------
int main()
{
    readInput();
    Solution();
    return 0;
}