Cod sursa(job #2837323)

Utilizator andu2006Alexandru Gheorghies andu2006 Data 22 ianuarie 2022 09:46:38
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <bits/stdc++.h>
#define LMAX 100001

using namespace std;

const int NMAX=1e5+5;
int p[NMAX],r[NMAX];
int Find(int u){
    return p[u]=(u==p[u]?u:Find(p[u]));
}
void Union(int u, int v){
    u=Find(u),v=Find(v);
    if(u==v) return;
    if(p[u]>p[v]) u^=v,v^=u,u^=v;
    p[u]=v,r[v]+=r[u];
}
int main()
{
    FILE* fin=fopen("disjoint.in","r");
    FILE* fout=fopen("disjoint.out","w");
    int n,q;
    fscanf(fin,"%d%d",&n,&q);
    for(int i=1;i<=n;i++) r[i]=1,p[i]=i;
    while(q--){
        int t,u,v;
        fscanf(fin,"%d%d%d",&t,&u,&v);
        if(t==1)
            Union(u,v);
        else fprintf(fout,Find(u)==Find(v)?"DA\n":"NU\n");
    }
    return 0;
}