Pagini recente » Cod sursa (job #2166325) | Cod sursa (job #3173377) | Cod sursa (job #1399620) | Cod sursa (job #2135813) | Cod sursa (job #2122846)
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=100007;
ifstream in("ctc.in");
ofstream out("ctc.out");
vector<int>L[N],Lt[N],ctc[N];
int n,m,Q[N],nrc,u;
bool viz[N];
void citire(){
in>>n>>m;
int i,x,y;
for(i=1;i<=m;i++){
in>>x>>y;
L[x].pb(y);
Lt[y].pb(x);
}}
void dfs1(int x){
int i,z;
viz[x]=1;
Q[++u]=x;
for(i=0;i<L[x].size();i++)
{z=L[x][i];
if(!viz[z])dfs1(z);
}}
void dfs2(int x){
int i,z;
viz[x]=1;
ctc[nrc].pb(x);
for(i=0;i<Lt[x].size();i++){
z=Lt[x][i];
if(!viz[z])dfs2(z);}
}
void afisare(){
int i,j;
out<<nrc<<"\n";
for(i=1;i<=nrc;i++)
{for(j=0;j<ctc[i].size();j++)
out<<ctc[i][j]<<" ";
out<<"\n";
}}
void rez(){
int i,y,p;
for(i=1;i<=n;i++)
if(!viz[i])dfs1(i);
for(i=1;i<=n;i++)viz[i]=0;
p=1;
while(p<=u)
{y=Q[p++];
if(!viz[y]){
nrc++;
dfs2(y);}
}}
int main(){
citire();
rez();
afisare();
return 0;}