Cod sursa(job #2260651)

Utilizator TeddyDinutaDinuta Eduard Stefan TeddyDinuta Data 15 octombrie 2018 12:12:33
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;
int h[100100],p[100100],N,M,t,x,y;
void init(int n)
{
    for(int i=1;i<=n;i++)
       p[i]=i;
}
int Find(int x)
{
    int r=x;
    while(p[r]!=r)
        r=p[r];
    while(p[x]!=r)
    {
        int tmp=p[x];
        p[x]=r;
        x=tmp;
    }
    return r;
}
void Union(int x,int y)
{
    int rx=Find(x),ry=Find(y);
    if(rx!=ry)
       p[rx]=ry;
}
int main()
{
    ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    cin>>N>>M;
    init(N);
    for(int i=1;i<=M;i++)
    {
        cin>>t>>x>>y;
        if(t==1) Union(x,y);
        else
        {
            if(Find(x)==Find(y)) cout<<"DA"<<'\n';
            else cout<<"NU"<<'\n';
        }
    }
    return 0;
}