Cod sursa(job #914531)

Utilizator tvararuVararu Theodor tvararu Data 14 martie 2013 11:24:11
Problema Parcurgere DFS - componente conexe Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <queue>
using namespace std;

int main (int argc, char const *argv[])
{
  ifstream in ("dfs.in");
  
  int n, m; in >> n >> m;
  
  vector< vector<int> > liAd (n);
  
  int x, y;
  while (in >> x >> y) {
    x--; y--;
    liAd[x].push_back(y);
  }
  
  in.close();
  
  set<int> remaining;
  
  for (int i = 0; i < n; i++) {
    remaining.insert(i);
  }
  
  int nr = 0;
  
  queue<int> bfs;
  while (!remaining.empty()) {
    bfs.push(*remaining.begin());
    remaining.erase(remaining.begin());
    
    while (!bfs.empty()) {
      int nod = bfs.front();
      bfs.pop();
      
      for (unsigned i = 0; i < liAd[nod].size(); i++) {
        if (remaining.find(liAd[nod][i]) != remaining.end()) {
          bfs.push(liAd[nod][i]);
          remaining.erase(liAd[nod][i]);
        }
      }
    }
    nr++;
  }
  
  ofstream out ("dfs.out");
  out << nr << '\n';
  out.close();
  
  return 0;
}