Cod sursa(job #2354792)

Utilizator AnnaLipianuLipianu Ana AnnaLipianu Data 25 februarie 2019 16:29:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <cstdio>
using namespace std;
FILE *fin=fopen("disjoint.in","r"),*fout=fopen("disjoint.out","w");
int sef[100005];
int sefsuprem(int x)
{
    if(sef[x]==x)
        return x;
    else
        return sef[x]=sefsuprem(sef[x]);
}
void unire(int x, int y)
{
    int sefsx=sefsuprem(x);
    int sefsy=sefsuprem(y);
    sef[sefsx]=sefsy;
}
int main()
{
    int n,m,i,x,y,p;
    ///freopen("disjoint.in","r",stdin);
    ///freopen("disjoint.out","w",stdout);
    fscanf(fin,"%d%d",&n,&m);
    for(i=1;i<=n;i++)
        sef[i]=i;
    for(i=1;i<=m;i++)
    {
        fscanf(fin,"%d%d%d",&p,&x,&y);
        if(p==1)
            unire(x,y);
        else
            if(sefsuprem(x)==sefsuprem(y))
                fprintf(fout,"DA\n");
            else
                fprintf(fout,"NU\n");
    }

    return 0;
}