Cod sursa(job #241200)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 9 ianuarie 2009 16:28:27
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <stdio.h>
#include <vector>
#define pb(a) push_back(a);
using namespace std;
long n,m,i,l,t,x,y,n1,n2,c[100000];
vector <int> v[100000];

void join(int x,int y){
  if (c[x]<c[y]){n1=c[x];n2=c[y];}
  else {n1=c[y];n2=c[x];}
  l=v[n2].size();
  for (int i=0;i<l;++i){
      int poz=v[n2][i];
      c[poz]=n1;
      v[n1].pb(poz);
  }
}
int main(){
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%ld %ld",&n,&m);
    for (i=1;i<=n;++i){v[i].pb(i);c[i]=i;}
    for (i=1;i<=m;++i){
      scanf("%ld %ld %ld",&t,&x,&y);
      if (t==1)join(x,y);
      else if (c[x]==c[y])printf("DA\n");else printf("NU\n");
    }
return 0;
}