Cod sursa(job #1605799)

Utilizator Alex.PAlexandru Pacurar Alex.P Data 19 februarie 2016 15:20:01
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <stdio.h>
#include <stdlib.h>
#include <vector>

using namespace std;

vector <int> v[100001];
int        vec[100001];

void mutare(int a, int b){  // muta multimea b in a.
  int c=vec[b];
  while(v[c].size()>0){
    vec[v[b].back()]=a;
    v[vec[a]].push_back(v[c].back());
    v[c].pop_back();
  }
}

int main()
{
    FILE *fin, *fout;
    int n,k,i,j,op,x;
    fin=fopen("disjoint.in","r");
    fout=fopen("disjoint.out","w");
    fscanf(fin,"%d%d",&n,&k);
    for(i=0;i<n;i++){
      vec[i]=i;
      v[i].push_back(i);
    }
    for(x=0;x<k;x++){
      fscanf(fin,"%d%d%d",&op,&i,&j);
      i--;
      j--;
      if(op==1){
        if(v[vec[i]].size()<v[vec[j]].size())
          mutare(j,i);
        else
          mutare(i,j);
      }else{
        if(vec[i]==vec[j])
          fprintf(fout,"DA\n");
        else
          fprintf(fout,"NU\n");
      }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}