Cod sursa(job #2019730)

Utilizator gavra_bogdanBogdan Gavra gavra_bogdan Data 8 septembrie 2017 13:40:54
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;
int g[100001],tata[100001];
int find(int x)
{
    if(tata[tata[x]]!=tata[x])
        tata[x]=find(tata[x]);
    return tata[x];
}
void unite(int a,int b)
{
    a=find(a);
    b=find(b);
    if(a==b)
    return;
    if(g[a]<g[b])
    {
        tata[a]=b;
        g[b]+=g[a];
    }
    else
    {
        tata[b]=a;
        g[a]+=g[b];
    }
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int n,x,y,m,v;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        tata[i]=i;
        g[i]=1;
    }
    for(int i=1;i<=m;i++)
    {
        cin>>v>>x>>y;
        if(v==1)
            unite(x,y);
        if(v==2)
            {
                if(find(x)==find(y))
                    cout<<"DA\n";
                else
                    cout<<"NU\n";
            }
    }
    return 0;
}