Cod sursa(job #767417)

Utilizator memaxMaxim Smith memax Data 13 iulie 2012 14:41:41
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

vector<int> p(1);

int gp(int u);
void mr(int a, int b);

int main(){
    ifstream cinr ("disjoint.in");
    ofstream cour ("disjoint.out");
    int n,m,x,y;
    
    cinr >> n;
    cinr >> m;
    for(int i=1; i<=n; i++) p.push_back(i);
    for(int i=1; i<=m; i++){
            cinr >> n;
            if(n==1){
                     cinr >> x; cinr >> y;
                     mr(x,y);                 
                     }
            if(n==2){
                     cinr >> x; cinr >> y;
                     if(gp(x)==gp(y)){ cour << "DA\n"; }
                     else            { cour << "NU\n"; }
                     }
            }
    
    //cin.ignore(2);
    return 0;
    }

void mr(int a, int b){
     a=gp(a);
     b=gp(b);
     p[a]=p[b];
     }

int gp(int u){
    if(p[u]==u) return(u);
    return( p[u] = gp(p[u]) );
    }