Pagini recente » Diferente pentru utilizator/kyrk intre reviziile 44 si 106 | Diferente pentru runda/incalzire2020 intre reviziile 1 si 2 | Diferente pentru utilizator/depevlad intre reviziile 82 si 6 | Diferente pentru utilizator/badea_adi1999 intre reviziile 10 si 11 | Cod sursa (job #688049)
Cod sursa(job #688049)
#include <cstdio>
#include <vector>
#include <stack>
#include <iostream>
using namespace std;
#define NMAX 100005
int N, M;
vector<int> neigh[NMAX];
void read_file(){
int a,b;
FILE * f = fopen("dfs.in", "rt");
fscanf(f, "%d %d", &N, &M);
for(int i = 0; i < M; ++i){
fscanf(f, "%d %d", &a, &b);
neigh[a].push_back(b);
}
fclose(f);
}
vector<int> visited;
void dfs(int node){
visited[node] = 1;
for(unsigned i = 0; i < neigh[node].size(); ++i)
if(!visited[neigh[node][i]])
dfs(neigh[node][i]);
}
int nr_dfs = 0;
void dfs_1(){
for(int i = 1; i <= N; ++i)
if(!visited[i]){
++nr_dfs;
dfs(i);
}
}
void print_sol(){
FILE * f = fopen("dfs.out", "wt");
fprintf(f, "%d ", nr_dfs);
fclose(f);
}
int main(){
read_file();
visited.resize(N+1);
dfs_1();
print_sol();
return 0;
}