Pagini recente » Cod sursa (job #1335978) | Cod sursa (job #2697911) | Cod sursa (job #1320785) | Cod sursa (job #1046586) | Cod sursa (job #2354685)
#include <bits/stdc++.h>
using namespace std;
int viz[5001], k, n, m;
vector <int> v1[5001], v2[5001];
void dfs1(int nod)
{
viz[nod]++;
for (int i = 0; i < v1[nod].size(); i++)
if (viz[v1[nod][i]] == 0)
dfs1(v1[nod][i]);
}
void dfs2(int nod)
{
viz[nod]++;
for (int i = 0; i < v2[nod].size(); i++)
if (viz[v2[nod][i]] == 1)
dfs2(v2[nod][i]);
}
int main()
{
ifstream cin("ctc.in");
ofstream cout("ctc.out");
cin >> n >> m;
stack <int> q[n];
for (int i = 1; i <= m; i++)
{
int x, y;
cin >> x >> y;
v1[x].push_back(y);
v2[y].push_back(x);
}
for (int i = 1; i <= n; i++)
if (viz[i] == 0)
{
k++;
dfs1(i);
dfs2(i);
for (int j = 1; j <= n; j++)
{
if (viz[j] == 2)
{
q[k].push(j);
viz[j] = -1;
}
if (viz[j] != -1)
viz[j] = 0;
}
}
cout << k << '\n';
for (int i = 1; i <= k; i++)
{
while (!q[i].empty())
cout << q[i].top() << ' ', q[i].pop();
cout << '\n';
}
return 0;
}