Cod sursa(job #627350)
#include<fstream>
#include<vector>
using namespace std;
int N, M, k;
vector <int> a[100001];
int v[100001], viz[100001];
void DFS(int s){
int i;
viz[s] = 1;
v[k++] = s;
for (i = 0; i < a[s].size(); i++){
if (!viz[a[s][i]])
DFS(a[s][i]);
}
}
int main(){
ifstream fin("dfs.in");
ofstream fout("dfs.out");
int i, x, y, nr = 0;
fin >> N >> M;
for (i = 0; i < M ; i++){
fin >> x >> y;
a[x].push_back(y);
}
bool gata = false;
while (!gata){
for (i = 1 ; i <= N && viz[i] == 1; i++) ;
if (i <= N) { DFS(i); nr++; }
else gata = 1;
}
fout << nr << "\n";
return 0;
}