Pagini recente » Cod sursa (job #2245194) | Cod sursa (job #2035422) | Cod sursa (job #1432727) | Cod sursa (job #2504717) | Cod sursa (job #2561515)
#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
#define cin fin
#define cout fout
#define Nmax 100010
int n, contor;
vector < int > g1[Nmax], g2[Nmax], sol[Nmax];
stack < int > stiva;
bitset < Nmax > viz1;
bitset < Nmax > viz2;
void read() {
int m;
cin >> n >> m;
while(m--)
{
int x, y;
cin >> x >> y;
g1[x].push_back(y);
g2[y].push_back(x);
}
}
void DFS(int nod) {
viz1[nod] = 1;
for(const auto it : g1[nod]) {
if(viz1[it] == 0) {
DFS(it);
stiva.push(it);
}
}
}
void dfs(int nod) {
sol[contor].push_back(nod);
viz2[nod] = 1;
for(const auto it : g2[nod]) {
if(viz2[it] == 0) {
dfs(it);
}
}
}
void solve() {
DFS(1);
while(!stiva.empty()) {
int nod = stiva.top();
stiva.pop();
if(viz2[nod] == 0) {
contor++;
dfs(nod);
}
}
}
void afis() {
cout << contor << endl;
for(int i=1; i<=contor; i++)
{
for(const auto it : sol[i]) {
cout << it << " ";
}
cout << endl;
}
}
int main() {
read();
solve();
afis();
}