Pagini recente » Cod sursa (job #286495) | Cod sursa (job #1008169) | Cod sursa (job #491909) | Cod sursa (job #1228235) | Cod sursa (job #2595407)
#include<fstream>
#include<vector>
#include<stack>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n,i,m,a,b,j,nr;
vector<int>v[100001],vt[100001];
bool viz[100001],Viz[100001];
vector<int>ctc[100001];
stack<int>st;
void dfs(int vf)
{
viz[vf]=true;
for(int i=0; i<v[vf].size(); i++)
if(!viz[v[vf][i]])
{
dfs(v[vf][i]);
}
st.push(vf);
}
void Dfs(int vf)
{
Viz[vf]=true;
for(int i=0; i<vt[vf].size(); i++)
if(!Viz[vt[vf][i]])
{
Dfs(vt[vf][i]);
ctc[j].push_back(vt[vf][i]);
}
}
int main()
{
fin>>n>>m;
for(i=1; i<=m; i++)
{
fin>>a>>b;
v[a].push_back(b);
vt[b].push_back(a);
}
for(j=1; j<=n; j++)
{
if(!viz[j])
dfs(j);
}
while(!st.empty())
{
j=st.top();
st.pop();
if(!Viz[j])
{
Dfs(j);
nr++;
}
}
fout<<nr<<"\n";
for(i=1; i<=n; i++)
{
if(ctc[i].size())
{
for(j=0; j<ctc[i].size(); j++)
fout<<ctc[i][j]<<" ";
fout<<"\n";
}
}
}