Cod sursa(job #1328808)

Utilizator forever16Alex M forever16 Data 28 ianuarie 2015 19:45:41
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <iostream>
#include<fstream>

using namespace std;
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");

int n, m, x, y, cod, p[100002], rang[100002];

int cautare(int x)
{   if(x!=p[x]) p[x]=cautare(p[x]);
return p[x];
}

void unite(int x, int y)
{  int px=cautare(x);
    int py=cautare(y);
 if(rang[px]>rang[py])
        p[py]=x;
        else p[px]=y;
    if(rang[px]==rang[py]) rang[px]++;
}

int main()

{   f>>n>>m;
for(int i=1; i<=n; i++) {p[i]=i; rang[i]=1;}

for(int i=1;i<=m; i++) {f>>cod>>x>>y;
if(cod==1) {if(cautare(x)!=cautare(y)) unite(x,y);}
else if(cautare(x)==cautare(y)) g<<"DA"<<"\n";
else g<<"NU"<<"\n";}
    return 0;
}