Cod sursa(job #2343961)

Utilizator HaesteinnSabau Florin Vlad Haesteinn Data 14 februarie 2019 16:42:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include<bits/stdc++.h>
#define NMAX 100005
#define MMAX 100005
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n,m;
int link[NMAX],height[NMAX];

int find(int x)
{
    while(x!=link[x]) x=link[x];
    return x;
}

bool same(int a,int b)
{
    return find(a)==find(b);
}

void unite(int a,int b)
{
    a=find(a);
    b=find(b);
    if(height[a]>height[b]) swap(a,b);
    link[a]=b;
    height[b]=max(height[b],height[a]+1);
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++) link[i]=i;
    for(int i=1;i<=n;i++) height[i]=1;
    for(int i=0;i<m;i++)
    {
        int t,a,b;
        fin>>t>>a>>b;
        if(t==1) unite(a,b);
        if(t==2) fout<<(same(a,b)?"DA\n":"NU\n");
    }

    return 0;
}