Cod sursa(job #442746)

Utilizator csizMocanu Calin csiz Data 15 aprilie 2010 02:58:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <vector>
#include <list>
#include <iostream>
using namespace std;

int main(){
    ifstream in("disjoint.in");
    ofstream out("disjoint.out");

    int n,m;in>>n>>m;

    vector<vector<int> > king(n);
    vector<int> sclav(n);
    for(int i=0;i<n;i++){
        sclav[i]=i;
        king[i].push_back(i);
    }

    for(int i=0;i<m;i++){
        int t,x,y;
        in>>t>>x>>y;x--;y--;
        if(t==1){
            if(king[sclav[y]].size()>king[sclav[x]].size())
                swap(x,y);

            vector<int>& loser=king[sclav[y]];
            vector<int>& winner=king[sclav[x]];
            for(int i=0;i<loser.size();i++){
                sclav[loser[i]]=sclav[x];
            }
            winner.insert(winner.end(),loser.begin(),loser.end());

        }else{
            if(sclav[x]==sclav[y]) out<<"DA\n";
            else out<<"NU\n";
        }
    }
}