Cod sursa(job #598952)

Utilizator ion_calimanUAIC Ion Caliman ion_caliman Data 27 iunie 2011 16:39:19
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int a[100005][100],n,m,i,c,x,y,k;
bool b[100005];

void uneste(int x, int y)
{
    a[x][++a[x][0]]=y;
}

bool da(int x, int y)
{
    b[x]=1;
    bool bb=0;
    for (int i=1; i<=a[x][0]; i++)
    if (a[x][i]==y) {bb=1; break;} else
    {if (!b[a[x][i]]) bb=da(a[x][i],y); if (bb) break;}
    b[x]=0;
    if (bb) return 1; else return 0;
}

int main()
{
    f >> n >> m;
    fill_n(b,n+1,0);
    for (i=1;i<=n; i++)
        a[i][0]=0;
    for (i=0; i<m; i++)
    {
        f >> c >> x >> y;
        if (c==1) uneste(x,y), uneste(y,x); else
        if (da(x,y)) k=0, g << "DA\n"; else k=0, g << "NU\n" ;
    }
}