Cod sursa(job #1193669)

Utilizator bogdanmarin69Bogdan Marin bogdanmarin69 Data 1 iunie 2014 13:58:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <cstdio>
using namespace std;
#define MAX 100001
struct nod{
    int info;
    nod *adr;
} v[MAX], *p;
int n, m;
int main()
{
    int i, cod, x, y, a, b;
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++){
        p = new nod;
        v[i].adr = p; v[i].info = 1;
        p->info = i; p->adr=NULL;
    }
    for(i=1; i<=m; i++){
        scanf("%d%d%d", &cod, &x, &y);
        if(cod==1){
            a = v[x].adr->info;
            b = v[y].adr->info;
            if(v[a].info<v[b].info){
                a = v[y].adr->info;
                b = v[x].adr->info;
            }
            p = v[b].adr;
            while(p->adr!=NULL){
                p->info = a;
                p = p->adr;
            }
            p->info = a;
            p->adr = v[a].adr;
            v[a].adr = v[b].adr;
        }
        else{
            if(v[x].adr->info==v[y].adr->info)
                printf("DA\n");
            else printf("NU\n");
        }
    }
    return 0;
}