Pagini recente » Cod sursa (job #2934299) | Cod sursa (job #2296373) | Cod sursa (job #595904) | Cod sursa (job #842841) | Cod sursa (job #2162818)
# include <bits/stdc++.h>
using namespace std;
const int nmax = 1e5 + 5;
vector <int> G[nmax], G2[nmax];
bool sel[nmax];
int st[nmax], n, m, N;
void dfs(int node)
{
sel[node] = true;
for (auto &it: G[node])
if (!sel[it]) dfs(it);
st[++N] = node;
}
void dfs2(int node, bool afis)
{
sel[node] = true;
if (afis) printf("%d ", node);
for (auto &it: G2[node])
if (!sel[it]) dfs2(it, afis);
}
int main ()
{
freopen("ctc.in", "r", stdin);
freopen("ctc.out", "w", stdout);
scanf("%d %d\n", &n, &m);
for (int i = 1; i <= m; ++i)
{
int x, y;
scanf("%d %d\n", &x, &y);
G[x].push_back(y);
G2[y].push_back(x);
}
for (int i = 1; i <= n; ++i)
if (!sel[i]) dfs(i);
int nr = 0;
memset(sel, false, sizeof(sel));
for (int i = n; i >= 1; --i)
if (!sel[st[i]])
{
++nr;
dfs2(st[i], false);
}
printf("%d\n", nr);
memset(sel, false, sizeof(sel));
for (int i = n; i >= 1; --i)
if (!sel[st[i]])
{
dfs2(st[i], true);
printf("\n");
}
return 0;
}