Pagini recente » Cod sursa (job #992467) | Cod sursa (job #2375372) | Cod sursa (job #1787208) | Cod sursa (job #913170) | Cod sursa (job #530737)
Cod sursa(job #530737)
#include<stdio.h>
#include<vector>
#include<stack>
#include<string>
#define NMAX 100001
using namespace std;
FILE *f=fopen("ctc.in","r");
FILE *g=fopen("ctc.out","w");
int N,M,nr,sol[NMAX],nrs,nr2;
int viz[NMAX];
vector <int> a[NMAX],b[NMAX],sl[NMAX];
stack <int> s;
void df2(int nod){
viz[nod]=-1;
sol[++nrs]=nod;
for(int i=0;i<(int)b[nod].size();++i){
if(viz[b[nod][i]]!=-1)
df2(b[nod][i]);
}
}
void df(int nod){
viz[nod]=1;
for(int i=0;i<(int)a[nod].size();++i){
if(!viz[a[nod][i]])
df(a[nod][i]);
}
s.push(nod);
}
void afis(){
nr2++;
for(int i=1;i<=nrs;++i)
sl[nr2].push_back(sol[i]);
}
int main(){
fscanf(f,"%d%d",&N,&M);
for(int i=1;i<=M;++i)
{ int x,y;
fscanf(f,"%d%d",&x,&y);
a[x].push_back(y);
b[y].push_back(x);
}
for(int i=1;i<=N;++i)
if(!viz[i]){
df(i);
}
while(! s.empty()){
int nod=s.top();
s.pop();
nrs=0;
if(viz[nod]!=-1){
df2(nod);
afis();
}
}
fprintf(g,"%d\n",nr2);
for(int i=1;i<=nr2;++i){
for(int j=0;j<(int)sl[i].size();++j)
fprintf(g,"%d ",sl[i][j]);
fprintf(g,"\n");
}
return 0;
}