Cod sursa(job #767420)

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

vector<int> p(1),s(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);
            s.push_back(1);
            }
    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);
     if(s[a]>s[b]){
                   int y=a;
                   a=b; b=y;
                   }
     p[b]=a;
     s[a]+=s[b];
     }

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