Pagini recente » Cod sursa (job #1535606) | Cod sursa (job #59063) | Cod sursa (job #1807440) | Cod sursa (job #1686278) | Cod sursa (job #1217581)
#include<fstream>
#include<stdio.h>
#include<vector>
#include<stack>
#include<algorithm>
#include<cstring>
#define MAXN 100005
#define pb push_back
using namespace std;
ifstream cin("ctc.in");
ofstream cout("ctc.out");
int N,M,viz[MAXN],k=0;
vector<int> G[MAXN],GT[MAXN],Sol[MAXN];
stack<int> st;
void DFS(int x) {
int i;
for(i=0;i<G[x].size();i++)
if (!viz[G[x][i]]) { viz[G[x][i]]=1;
DFS(G[x][i]); }
st.push(x);
}
void DFST(int x){
int i;
viz[x]=1;
for(i=0;i<GT[x].size();i++)
if(!viz[GT[x][i]])
DFST(GT[x][i]);
Sol[k].pb(x);
}
int main() {
int i,j,x,y;
cin>>N>>M;
for(i=1;i<=M;i++) {
cin>>x>>y;
G[x].pb(y);
GT[y].pb(x); }
memset(viz,0,sizeof(viz));
for(i=1;i<=N;i++)
if (!viz[i]) { viz[i]=1;
DFS(i); }
memset(viz,0,sizeof(viz));
while(st.size()>0) {
x=st.top();
st.pop();
if(!viz[x]) {
k++;
DFST(x); }
}
cout<<k<<"\n";
for(i=1;i<=k;i++) {
for(j=0;j<Sol[i].size();j++)
cout<<Sol[i][j]<<" ";
cout<<"\n"; }
return 0;
}