Pagini recente » Cod sursa (job #346847) | Cod sursa (job #870783) | Cod sursa (job #2662526) | Cod sursa (job #1443608) | Cod sursa (job #2898407)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("ctc.in");
ofstream out ("ctc.out");
vector <int> v[100001];
vector <int> trans[100001];
int n, m;
vector <int> q;
vector < vector <int> > ans;
bool viz[100001];
void dfs (int nod)
{
viz[nod] = true;
for (auto vecin:v[nod])
if (!viz[vecin])
dfs(vecin);
q.push_back(nod);
}
void dfs_tr (int nod, int loc)
{
viz[nod] = true;
ans[loc].push_back(nod);
for (auto vecin:trans[nod])
if (!viz[vecin])
dfs_tr(vecin, loc);
}
main ()
{
in >> n >> m;
for (int i = 1;i<=m;++i)
{
int a, b;
in >> a >> b;
v[a].push_back(b);
trans[b].push_back(a);
}
for (int i = 1;i<=n;++i)
if (!viz[i])
dfs(i);
for (int i = 1;i<=n;++i)
viz[i] = 0;
int place = 0;
for (int i = q.size() - 1;i>=0;--i)
{
int nn = q[i];
if (!viz[nn])
{
vector <int> newx;
ans.push_back(newx);
dfs_tr(nn, place);
place++;
}
}
out << ans.size() << '\n';
for (auto vect:ans)
{
for (auto numar:vect)
out << numar << ' ';
out << '\n';
}
return 0;
}