Pagini recente » Cod sursa (job #2374166) | Cod sursa (job #2936036) | Cod sursa (job #1596860) | Cod sursa (job #77572) | Cod sursa (job #1180021)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream in("ctc.in");
ofstream out("ctc.out");
int n,m;
const int maxn=100010;
vector <int> Graf[maxn],Graft[maxn],Comp;
vector < vector <int> > Sol;
int Sort[maxn];
bool ok,viz[maxn];
void SortTop(int nod)
{
viz[nod]=1;
vector <int> :: iterator it;
for(it=Graft[nod].begin();it!=Graft[nod].end();it++)
if(!viz[*it])
SortTop(*it);
Sort[++Sort[0]]=nod;
}
void DFS(int nod)
{
viz[nod]=1;
Comp.push_back(nod);
vector <int> :: iterator it;
for(it=Graf[nod].begin();it!=Graf[nod].end();it++)
if(!viz[*it])
DFS(*it);
}
int main()
{
int i,x,y;
in>>n>>m;
for(i=1;i<=m;i++)
{
in>>x>>y;
Graf[x].push_back(y);
Graft[y].push_back(x);
}
for(i=1;i<=n;i++)
if(!viz[i])
SortTop(i);
memset(viz,0,sizeof(viz));
for(i=n;i>=0;i--)
if(!viz[Sort[i]])
{
DFS(Sort[i]);
Sol.push_back(Comp);
Comp.clear();
}
out<<Sol.size()<<"\n";
for(i=0;i<Sol.size();i++,out<<"\n")
for(vector <int> :: iterator it = Sol[i].begin();it!=Sol[i].end();it++)
out<<*it<<" ";
return 0;
}