Cod sursa(job #1386697)

Utilizator emiiMihailescu Ionut Emanuel emii Data 13 martie 2015 10:38:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n,m,v[100001],r[100001];
int caut(int x)
{
    int z;
    for(z=x;z!=v[z];z=v[z]);
    int y;
    while(x!=v[x])
    {
        y=v[x];
        v[x]=z;
        x=y;
    }
    return z;
}

void unesc (int x,int y)
{
    if(r[x]<r[y])
        v[x]=y;
    else
        v[y]=x;
    if(r[x]==r[y])
        r[x]++;
}
int main()
{f>>n>>m;
for(int i=1;i<=n;i++)
    v[i]=i,r[i]=1;
for(int i=1;i<=m;i++)
{
    int c,x,y;
    f>>c>>x>>y;
    if(c==1)
        unesc(caut(x),caut(y));
    else
        if(caut(x)==caut(y))
            g<<"DA\n";
    else
        g<<"NU\n";
}
return 0;
}