Cod sursa(job #2782340)

Utilizator AndreidreiGresoiu Liviu-Andrei Andreidrei Data 12 octombrie 2021 10:40:30
Problema Paduri de multimi disjuncte Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>
#define din cin
#define dout out
#define pi 3.14159265359d
#define sw(x,y) x^=y,y^=x,x^=y
#define bmin(a,b)((a<b)?a:b)
#define bmax(a,b)((a>b)?a:b)
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
long long n,m,i,j,a[100001],b[100001],x,y,*z;char c;
void p(){
y=x;
while(x!=a[x])x=a[x];
while(y!=a[y])z=&a[y],y=a[y],*z=x;
}
int main()
{
for(i=0;i<100001;i++)a[i]=i,b[i]=1;
in>>n>>m;
while(m--)
{
    in>>c>>i>>j;
    x=i,p();y=j,p();
    //cout<<i<<' '<<a[i]<<'\t'<<j<<' '<<a[j]<<'\n';
    if(c=='1')
    {
        if(a[i]!=a[j])
        {
            if(b[a[i]]>b[a[j]])
                b[a[i]]+=b[a[j]],a[j]=a[i];
                else b[a[j]]+=b[a[i]],a[i]=a[j];
        }
    }
    else out<<((a[i]==a[j])?"DA\n":"NU\n");
}
}