Pagini recente » Cod sursa (job #1634125) | Cod sursa (job #1634182) | Cod sursa (job #2447127) | Cod sursa (job #377910) | Cod sursa (job #3235682)
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>
#include <bitset>
#include <stack>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector<int> G[100005], Gt[100005], ctc[100005];
int m, n, k;
stack<int> st;
bitset<100005> viz;
void DFS(int x)
{
viz[x] = true;
for (auto w : G[x])
if (!viz[w])
DFS(w);
st.push(x);
}
void dfsGT(int x)
{
viz[x] = true;
ctc[k].push_back(x);
for (auto w : Gt[x])
if (!viz[w]) dfsGT(w);
}
int main()
{
int i, j;
cin >> n >> m;
while (m--)
{
cin >> i >> j;
G[i].push_back(j);
Gt[j].push_back(i);
}
for (i = 1; i <= n; i++)
if (!viz[i]) DFS(i);
viz.reset();
k = 0;
while (!st.empty())
{
int x = st.top();
st.pop();
if (!viz[x])
{
dfsGT(x);
k++;
}
}
fout << k << "\n";
for (auto u : ctc)
{
if (u.size() == 0) return 0;
for (auto w : u)
fout << w << " ";
fout << "\n";
}
return 0;
}