Cod sursa(job #3243361)

Utilizator Dragos__1_1Dragos Antohi Dragos__1_1 Data 17 septembrie 2024 19:31:41
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int q,n,parent[100002],sz[100002],i,c,a,b;
void make_set(int node){
    parent[i]=i;
    sz[i]=1;
}
int find_set(int node){
    if (parent[node]==node) return node;
    parent[node]=find_set(parent[node]);
    return parent[node];
}
void union_set(int node1,int node2){
    int a=find_set(node1);
    int b=find_set(node2);
    if (a!=b){
        if (sz[a]<sz[b])swap(a,b);
        parent[b]=a;
        sz[a]+=sz[b];
    }
}
int main()
{
    f>>n>>q;
    for (i=1;i<=n;i++)make_set(i);
    for (i=1;i<=q;i++){
        f>>c>>a>>b;
        if (c==1){
            union_set(a,b);
        }
        else {
            if (find_set(a)==find_set(b))g<<"DA\n";
            else g<<"NU\n";
        }
    }
    return 0;
}