Cod sursa(job #1425307)

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

using namespace std;

const int nmax = 100000;

vector <int> v[nmax+5];
queue <int> q;
bool viz[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;
    int s = 0;
    while(ok)
    {
        nr++;
        ok = false;
        for(int i=s+1; i<=n; i++)
            if(!viz[i])
            {
                s = i;
                ok = true;
                break;
            }
        viz[s] = true;
        q.push(s);
        while(!q.empty())
        {
            int temp = q.front();
            q.pop();
            for(int i=0; i<v[temp].size(); i++)
                if(!viz[v[temp][i]])
                {
                    viz[v[temp][i]] = true;
                    q.push(v[temp][i]);
                }
        }
    }
    printf("%d\n", nr-1);
    return 0;
}