Cod sursa(job #1144975)

Utilizator omerOmer Cerrahoglu omer Data 17 martie 2014 19:40:07
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
using namespace std;
FILE *f,*g;

struct nodul{
    int p,d;
}nod[100001];

int parent(int x){
    if (nod[x].p==x) return x;
    else nod[x].p=parent(nod[x].p);
    return nod[x].p;
}
bool find(int x,int y){
    if (parent(x)==parent(y)) return 1;
    else return 0;
}
void add(int x,int y){
    x=parent(x);
    y=parent(y);
    if (nod[x].d<nod[y].d) nod[x].p=y;
    else if (nod[x].p==nod[y].p) {nod[y].d++;nod[x].p=y;}
        else nod[y].p=x;
}
int main(void){
    int n,m,i,x,y,a;
    f=fopen("disjoint.in","r");
    g=fopen("disjoint.out","w");
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=n;i++) nod[i].p=i;
    for(i=1;i<=m;i++){
        fscanf(f,"%d%d%d",&a,&x,&y);
        if (a==1) add(x,y);
        else if (find(x,y)) fprintf(g,"DA");
            else fprintf(g,"NU");
    }
}