Pagini recente » Cod sursa (job #913483) | Cod sursa (job #1177509) | Cod sursa (job #602921) | Cod sursa (job #184660) | Cod sursa (job #2277420)
#include <bits/stdc++.h>
using namespace std;
const int lim = 1e5;
int diri[4] = {-1, 0, 1, 0}, dirj[4] = {0, 1, 0, -1};
vector <int> ad[lim + 1], adt[lim + 1], srt, aux;
vector <vector<int>> ctc;
bool viz[lim + 1];
ifstream fin("ctc.in");
ofstream fout("ctc.out");
void dfs(int nod){
viz[nod] = true;
for(auto fiu : ad[nod])
if(!viz[fiu])
dfs(fiu);
srt.push_back(nod);
}
void dfsi(int nod){
viz[nod] = true;
aux.push_back(nod);
for(auto fiu : adt[nod])
if(!viz[fiu])
dfsi(fiu);
}
int main()
{
int n, m, x, y;
fin >> n >> m;
for(int i = 0; i < m; i++){
fin >> x >> y;
ad[x].push_back(y);
adt[y].push_back(x);
}
for(int i = 1; i <= n; i++)
if(!viz[i])
dfs(i);
reverse(srt.begin(), srt.end());
memset(viz, 0, lim + 1);
for(auto e : srt)
if(!viz[e]){
aux.clear();
dfsi(e);
ctc.push_back(aux);
}
fout << ctc.size() << '\n';
for(auto v : ctc){
for(auto e : v)
fout << e << ' ';
fout << '\n';
}
fin.close();
fout.close();
return 0;
}