Cod sursa(job #883675)

Utilizator unsilviuContvechidontdeactivatepls unsilviu Data 20 februarie 2013 11:30:51
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <fstream>
using namespace std;

int v[100001],r[100001];
int main() {
    int i,n,m,op,x,y,dx,dy,q;

    ifstream in("disjoint.in");
    ofstream out("disjoint.out");
    in>>n>>m;

    for (i=1; i<=n; i++) {
        v[i]=i;
        r[i]=1;
    }

    for (i=1; i<=m; i++) {
        in>>op>>x>>y;
        dx=x;
        dy=y;
        if (op==1) {
            while (v[x]!=x)
                x=v[x];

            while (v[dx]!=dx) {
                q=v[dx];
                v[dx]=x;
                dx=q;
            }


            while (v[y]!=y)
                y=v[y];

            while (v[dy]!=dy) {
                q=v[dy];
                v[dy]=y;
                dy=q;
            }

            if (r[x]<r[y])
                v[x]=y;
            else
                v[y]=x;

            if (r[x]==r[y])
                r[y]++;
        }

        else if (op==2) {
            while (v[x]!=x)
                x=v[x];

            while (v[dx]!=dx) {
                q=v[dx];
                v[dx]=x;
                dx=q;
            }


            while (v[y]!=y)
                y=v[y];

            while (v[dy]!=dy) {
                q=v[dy];
                v[dy]=y;
                dy=q;
            }

            if (x==y)
                out<<"DA"<<'\n';
            else
                out<<"NU"<<'\n';
        }
    }

    out.close();
    return 0;
}