Cod sursa(job #354464)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 8 octombrie 2009 10:11:13
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<stdio.h>
#define DIM 100005
struct nod
{
    int x;
    nod *urm;
} *lst[DIM];
int viz[DIM],c[DIM],n;
void add (int a,int b)
{
    nod *p=new nod;
    p->x=b;
    p->urm=lst[a];
    lst[a]=p;
}
int bfs (int x,int y)
{
    int st,dr,i;
    nod *p;
    c[st=dr=1]=x;
    for(i=1;i<=n;++i)
        viz[i]=0;
    while(st<=dr)
    {
        viz[c[st]]=1;
        for(p=lst[c[st]];p;p=p->urm)
            if(!viz[p->x])
            {
                if(p->x==y)
                    return 1;
                c[++dr]=p->x;
            }
        ++st;
    }
    return 0;
}
int main ()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int i,m,q,x,y;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d%d",&q,&x,&y);
        if(q==1)
            add(x,y),add(y,x);
        else
        {
            if(bfs(x,y))
                printf("DA\n");
            else
                printf("NU\n");
        }
    }
    return 0;
}