Cod sursa(job #1977113)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 4 mai 2017 23:44:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>
#define Nmax 100001
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int t[Nmax];
int r[Nmax];
int find(int x)
{
    int rez,y;
    rez=x;
    while(rez!=t[rez])
        rez=t[rez];
    while(x!=t[x])
    {
        y=t[x];
        t[x]=rez;
        x=y;
    }
    return rez;
}
int unite(int x, int y)
{
    if(r[x]<r[y])
    t[x]=y;
    else t[y]=x;
    if(r[x]==r[y])
        r[y]++;
}
int main()
{int n,m,i,x,y,op;
f>>n>>m;
for(i=1;i<=n;i++)
{
    r[i]=1;
    t[i]=i;
}
for(i=1;i<=m;i++)
{
    f>>op>>x>>y;
    if(op==1)
        unite(find(x),find(y));
    else
    {
        if(find(x)==find(y)) g<<"DA\n";
        else g<<"NU\n";
    }
}

    return 0;
}