Pagini recente » Cod sursa (job #4185) | Cod sursa (job #2971244) | Cod sursa (job #2765779) | Cod sursa (job #1855504) | Cod sursa (job #2799499)
#include <bits/stdc++.h>
#define mod 1000000007
using namespace std;
ifstream in("ctc.in");
ofstream out("ctc.out");
vector<int> v[100001];
vector<int> tr[100001];
stack<int> st;
bool viz[100001];
vector<int> ans[1000];
void dsf1(int nod, int cat)
{
if (viz[nod] == 1)
return;
else
{
ans[cat].push_back(nod);
viz[nod] = 1;
}
for (auto vecin : tr[nod])
dsf1(vecin, cat);
}
void dfs(int nod)
{
if (viz[nod] == 1)
return;
else
viz[nod] = 1;
for (auto vecin : v[nod])
dfs(vecin);
st.push(nod);
}
void solve()
{
int n, m;
in >> n >> m;
for (int i = 1; i <= m; ++i)
{
int a, b;
in >> a >> b;
v[a].push_back(b);
tr[b].push_back(a);
}
for (int i = 1; i <= n; ++i)
if (viz[i] == 0)
dfs(i);
for (int i = 1; i <= n; ++i)
viz[i] = 0;
int place = 1;
while (!st.empty())
{
int top = st.top();
if (viz[top] == 0)
{
dsf1(top, place);
place++;
}
st.pop();
}
out << place - 1 << '\n';
for (int i = 1; i < place; ++i)
{
for (auto j : ans[i])
out << j << ' ';
out << '\n';
}
}
main()
{
int t = 1;
//cin >> t;
while (t--)
solve();
}