Pagini recente » Cod sursa (job #494946) | Cod sursa (job #793047) | Cod sursa (job #2037542) | Cod sursa (job #2789945) | Cod sursa (job #2740935)
#include <bits/stdc++.h>
#define iPair pair<int, int>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n, m, nrc;
vector<int> G[100001], GT[100001], ctc[100001];
int ap[100001];
stack<int> stiva;
void Citire()
{
int i, j;
fin >> n >> m;
for(int c=0; c<m; c++)
{
fin >> i >> j;
G[i].push_back(j);
GT[j].push_back(i);
}
}
void dfs(int k)
{
ap[k]=1;
for(int x : G[k])
if(ap[x]==0)
dfs(x);
stiva.push(k);
}
void dfsGT(int k)
{
ap[k]=nrc;
ctc[nrc].push_back(k);
for(int x : GT[k])
if(ap[x]==0)
dfsGT(x);
}
void Afisare()
{
fout << nrc << '\n';
for(int i=1; i<=nrc; i++)
{
for(int k : ctc[i])
fout << k << ' ';
fout << '\n';
}
}
int main()
{
int i;
Citire();
for(i=1; i<=n; i++)
if(ap[i]==0)
dfs(i);
for(i=1; i<=n; i++)
ap[i]=0;
while(!stiva.empty())
{
int k=stiva.top();
stiva.pop();
if(ap[k]==0)
{
nrc++;
dfsGT(k);
}
}
Afisare();
return 0;
}