Cod sursa(job #2606495)

Utilizator RaduNichitaRadu Nichita RaduNichita Data 27 aprilie 2020 21:34:15
Problema Sortare topologica Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.75 kb
#include <iostream>
	
#include <vector>
	
#include <fstream>
	
using namespace std;
	
 
	
 
	
 
	
#define NMAX 100005
	
 
	
class Task {
	
    std::vector<int> matrix[NMAX];
    std::vector<bool> visited;

	
    int N;
	
    int M;
	
 
	
    void read_input() {
	
        std::ifstream in("dfs.in");

        in >> N;
        visited = std::vector<bool> (N + 1, false);
	
        in >> M;
	
 
	
        for (int i = 0; i < M; i++) {
	
            int x;
	
            int y;
	
            in >> x;
	
            in >> y;
	
            matrix[x].push_back(y);
	
            matrix[y].push_back(x);
	
        }
	
        in.close();
	
    }
	
 
	
    void show_matrix() {
	
        for (int i = 0; i < N; i++) {
	
            std::cout<<i<<":";
	
            for (int j = 0; j < matrix[i].size(); j++) {
	
                std::cout<<matrix[i][j]<<" ";
	
            }
	
            std::cout<<"\n";
	
        }
	
    }
	
 
	
    void DFS_UTIL(int node) {
	
        visited[node] = true;
	
 
	
        for (int i = 0; i < matrix[node].size(); i++) {
	
            if (visited[matrix[node][i]] == false) {
	
                DFS_UTIL(matrix[node][i]);
	
            }
	
        }
	
    } 
	
 
	
    int DFS() {
	
        int conex = 0;
	
        for (int i = 1; i <= N; i++) {
	
            if (visited[i] == false) {
	
                DFS_UTIL(i);
                conex++;
            }
	
        }
        return conex;
	
    }
	
 
	
    void print(int res) {
	
        std::ofstream out("dfs.out");   
	
        out<<res<<"\n";
	
        out.close();
	
        return;
	
    }
	
 
	
 public:
	
    void solve() {
	
        read_input();
	
        print(DFS());
	
    }
	
 
	
};
	
 
	
int main() {
	
 
	
    Task* task = new Task();
	
    task->solve();
	
    delete(task);
	
 
	
    return 0;
	
}