Cod sursa(job #1407572)

Utilizator cautionPopescu Teodor caution Data 29 martie 2015 19:05:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define MAXN 100005
using namespace std;
long v[MAXN];
long go(long x)
{
    while(v[x]) x=v[x];
    return x;
}
void mark(long x, long mark)
{
    long aux;
    while(v[x])
    {
        aux=x;
        x=v[x];
        v[aux]=mark;
    }
}
int main()
{
    ifstream in("disjoint.in");
    ofstream out("disjoint.out");
    long n, m, a, b, t, aux1, aux2;
    in>>n>>m;
    for(long i=0; i<m; ++i)
    {
        in>>t>>a>>b;
        switch(t)
        {
        case 1:
            aux1=go(a);
            aux2=go(b);
            v[aux2]=aux1;
            break;
        case 2:
            aux1=go(a);
            mark(a, aux1);
            aux2=go(b);
            mark(b, aux2);
            if(aux1==aux2) out<<"DA\n";
            else out<<"NU\n";
            break;
        }
    }
    in.close(); out.close();
    return 0;
}