Cod sursa(job #1683921)

Utilizator DDragonXTruta Dragos Sebastian DDragonX Data 10 aprilie 2016 17:32:46
Problema Parcurgere DFS - componente conexe Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <cstring>
#include <iostream>
#include <algorithm>
#include <fstream>
#include <vector>
#include <queue>


std::ifstream f("dfs.in");
std::ofstream g("dfs.out");

#define MAXN 100005
#define g g

int N,M;

std::vector< int > G[MAXN];
std::queue< int > pq;

int viz[MAXN];

int main()
{

    f>>N>>M;
    for(int i=1; i<=M; i++)
    {
        int node1, node2;
        f>>node1>>node2;
        G[node1].push_back(node2);
        G[node2].push_back(node1);
    }
    for (int i = 1; i <= N; ++i)
    {
        std::cout << i << ": ";
        for (int j = 0; j < G[i].size(); ++j)
        {
            std::cout << G[i][j]<<" ";
        }
        std::cout << std::endl;
    }
    std::cout << std::endl;

    int cont = 0;
    for(int i=1; i<=N; i++)
    {
        if (viz[i])
        {
            continue;
        }
        cont++;
        pq.push(i);
        while (!pq.empty())
        {
            int node = pq.front();
            pq.pop();

            if (viz[node] == 1)
            {
                continue;
            }
            viz[node] = 1;

            for (int i = 0; i < G[node].size(); ++i)
            {
                pq.push(G[node][i]);
            }
        }
    }
    g<<cont;

    return(0);
}