Cod sursa(job #2270321)

Utilizator Teo_1101Mititelu Teodor Teo_1101 Data 27 octombrie 2018 10:31:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#define N 100001
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m;
int M[N],sz[N];
int Find(int x)
{
    int aux;
    int root=x;
    while(M[root]!=root)root=M[root];
    while(M[x]!=root)
    {
        aux=M[x];
        M[x]=root;
        x=aux;
    }
    return root;
}
void Union(int x,int y)
{
    int root_x=Find(x);
    int root_y=Find(y);
    if(sz[root_x]<sz[root_y])
    {
        sz[root_y]+=sz[root_x];
        M[root_x]=root_y;
    }
    else
    {
        sz[root_x]+=sz[root_y];
        M[root_y]=root_x;
    }
}
void Read()
{
    int p,x,y;
    fin>>n>>m;
    for(int i=1;i<=n;++i)
    {
        M[i]=i;
        sz[i]=1;
    }
    for(int i=1;i<=m;++i)
    {
        fin>>p>>x>>y;
        if(p==1)Union(x,y);
        else
        {
            if(Find(x)==Find(y))fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
}
int main()
{
    Read();
    return 0;
}