Cod sursa(job #214587)

Utilizator raduzerRadu Zernoveanu raduzer Data 15 octombrie 2008 11:06:38
Problema Parcurgere DFS - componente conexe Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <cstdio>
#include <stdlib.h>
#include <cstring>

const int MAX_N = 100010;

int n, m, x, y, sol;
int dg[MAX_N], a[MAX_N], f[MAX_N];
int *g[MAX_N];

void dfs(int x)
{
     if (a[x] == 0) 
     {
              ++sol;
              a[x] = sol;
     }
     else return;
     
     int i;
     
     for (i = 0; i < dg[x]; ++i)
     {
         if (a[g[x][i]]) continue;
         
         a[g[x][i]] = a[x];
         dfs(g[x][i]);
     }
}

int main()
{
    int i, j;
    
    freopen("dfs.in", "r", stdin);
    freopen("dfs.out", "w", stdout);
    
    scanf("%d %d",  &n, &m);
    
    for (i = 1; i <= m; ++i) 
    {
        scanf("%d %d", &x, &y);
        ++dg[x];
        ++dg[y];
    }
    
    fclose(stdin);
    freopen("dfs.in", "r", stdin);
    
    scanf("%d %d", &n, &m);
    
    for (i = 1; i <= n; ++i) g[i] = (int *) malloc(sizeof(int) * dg[i]);
    memset(dg, 0, sizeof(dg));
    
    for (i = 1; i <= m; ++i) 
    {
        scanf("%d %d", &x, &y);
        g[x][dg[x]++] = y;
        g[y][dg[y]++] = x;
    }
    
    for (i = 1; i <= n; ++i) dfs(i);
    
    printf("%d\n", sol);
    
    return 0;
}