Cod sursa(job #1980850)

Utilizator NineshadowCarapcea Antonio Nineshadow Data 14 mai 2017 10:41:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
#define MAXN 100005
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n,m,GR[MAXN],ord[MAXN];
void makeSet(int x)
{
    GR[x]=x;
    ord[x]=0;
}
int findSet(int x)
{
    if(x!=GR[x])
        GR[x]=findSet(GR[x]);
    return GR[x];
}
void unionSet(int x, int y)
{
    int px=findSet(x),py=findSet(y);
    if(ord[px]>ord[py])
        GR[py]=px;
    else
        GR[px]=py;
    if(ord[px]==ord[py])
        ord[py]=ord[py]+1;

}
int main()
{
    in>>n>>m;
    for(int i=1;i<=n;++i)
        makeSet(i);
    for(int i=1;i<=m;++i)
    {
        int a,b,c;
        in>>a>>b>>c;
        if(a==1)
            unionSet(b,c);
        else
            if(findSet(b)==findSet(c))
                out<<"DA\n";
            else
                out<<"NU\n";
    }
    return 0;
}