Pagini recente » Cod sursa (job #1375157) | Rating Trandafir Denisa-Iulia (denisa.t) | Cod sursa (job #1333942) | Cod sursa (job #2249615) | Cod sursa (job #2867993)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
const int MAX=1e5+5;
int n,m,a,b,viz1[MAX],viz2[MAX],ctc;
vector < int > v[MAX],g[MAX],c[MAX],st;
void DFS1(int nod)
{
viz1[nod]=1;
for(auto vec : v[nod])
if(!viz1[vec])
DFS1(vec);
st.push_back(nod);
}
void DFS2(int nod)
{
c[ctc].push_back(nod);
viz2[nod]=1;
for(auto vec : g[nod])
if(!viz2[vec])
DFS2(vec);
}
int main()
{
fin >> n >> m;
while(m--)
{
fin >> a >> b;
v[a].push_back(b);
g[b].push_back(a);
}
DFS1(1);
while(!st.empty())
{
int nod=st.back();
st.pop_back();
if(!viz2[nod])
{
ctc++;
DFS2(nod);
}
}
fout << ctc << '\n';
for(int i=1;i<=ctc;i++, fout << '\n')
for(auto x : c[i])
fout << x << " ";
return 0;
}