Cod sursa(job #1330578)

Utilizator Consti.001FMI Dranca Constantin Consti.001 Data 30 ianuarie 2015 19:50:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int l[100001];
int n,m,i,j,k,ok,x,y,q;
void read()
{
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        l[i]=-1;
    }
}
void reunion(int x, int y)
{
    if(l[x]>l[y])
    {
        l[y]+=l[x];
        l[x]=y;
    }
    else
    {
        l[x]+=l[y];
        l[y]=x;
    }
}
int caut(int x)
{
    if(l[x]<0) return x;
    else
    l[x]=caut(l[x]);
    return l[x];
}
void solve()
{
    for(k=1;k<=m;k++)
    {
        f>>q>>x>>y;
        ok=caut(x);
        j=caut(y);
        if(q==1)
        reunion(ok,j);
        else
        if(q==2)
        {

            if(ok==j)
            g<<"DA\n";
            else
            g<<"NU\n";
        }
    }
}
int main()
{
    read();
    solve();
}