Cod sursa(job #1425304)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 27 aprilie 2015 11:43:15
Problema Parcurgere DFS - componente conexe Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#include <queue>
#include <vector>

using namespace std;

const int nmax = 100000;

vector <int> v[nmax+5];
queue <int> q;
int dist[nmax+5];

int main()
{
    freopen("dfs.in", "r", stdin);
    freopen("dfs.out", "w", stdout);
    int n, m;
    scanf("%d%d", &n, &m);
    for(int i=0; i<m; i++)
    {
        int a, b;
        scanf("%d%d", &a, &b);
        v[a].push_back(b);
        v[b].push_back(a);
    }
    bool ok = true;
    int nr = 0;
    while(ok)
    {
        nr++;
        int s;
        ok = false;
        for(int i=1; i<=n; i++)
            if(dist[i] == 0)
            {
                s = i;
                ok = true;
                break;
            }
        dist[s] = 1;
        q.push(s);
        while(!q.empty())
        {
            int temp = q.front();
            q.pop();
            for(int i=0; i<v[temp].size(); i++)
                if(!dist[v[temp][i]])
                {
                    dist[v[temp][i]] = dist[temp] + 1;
                    q.push(v[temp][i]);
                }
        }
    }
    printf("%d\n", nr-1);
    return 0;
}