Cod sursa(job #2517264)

Utilizator NaritaandreiCNAINarita Andrei NaritaandreiCNAI Data 3 ianuarie 2020 11:46:37
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
FILE *f,*g;
int t[200002],rang[200002];
int n,m;
void read()
{
    fscanf(f,"%d %d",&n,&m);
}
int root(int node)
{
    if(t[node]!=node)
        t[node]=root(t[node]);
    return t[node];
}
void unite(int x, int y)
{
    if(rang[x]<rang[y])
        t[x]=t[y];
    else
        t[y]=t[x];
    if(rang[x]==rang[y])
        rang[x]++;
}
void solve()
{   int task,x,y;
    for(int i=1; i<=n; i++)
        t[i]=i;
    for(int i=1; i<=m; i++)
    {
        fscanf(f,"%d %d %d",&task,&x,&y);
        if(task==1)
        {
            x=root(x);
            y=root(y);
            unite(x,y);
        }
        else
        {
            if(root(x)==root(y))
                fprintf(g,"DA\n");
            else
                fprintf(g,"NU\n");
        }
    }
}
int main()
{
    f=fopen("disjoint.in","r");
    g=fopen("disjoint.out","w");
    read();
    solve();
    fclose(f);
    fclose(g);
    return 0;
}