Pagini recente » Cod sursa (job #641816) | Cod sursa (job #607393) | Cod sursa (job #2665297) | Cod sursa (job #1846537) | Cod sursa (job #3215888)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define MAXN 100005
#define MAXM 200005
#define ALB 0
#define GRI 1
#define BLK 2
using namespace std;
vector <int> graf[MAXN];
vector <int> ginv[MAXN];
vector <int> ans[MAXN];
vector <int> parc;
int seen[MAXN];
void DFS(int node,vector <int> *grf,vector <int> *dat){
seen[node]=1;
for(int neigh : grf[node]){
if(seen[neigh]==0){
DFS(neigh,grf,dat);
}
}
(*dat).push_back(node);
}
int main(){
int n,m,i,x,y;
FILE *fin,*fout;
fin=fopen("ctc.in","r");
fout=fopen("ctc.out","w");
fscanf(fin,"%d%d",&n,&m);
for(i=0;i<m;i++){
fscanf(fin,"%d%d",&x,&y);
graf[x].push_back(y);
ginv[y].push_back(x);
}
for(i=1;i<=n;i++){
if(seen[i]==0){
DFS(i,graf,&parc);
}
}
for(i=1;i<=n;i++){
seen[i]=0;
}
int r=0;
while(!parc.empty()){
int elem=parc.back();
parc.pop_back();
if(seen[elem]==0){
DFS(elem,ginv,&ans[r]);
r++;
}
}
fprintf(fout,"%d\n",r);
for(i=0;i<r;i++){
for(int node : ans[i]){
fprintf(fout,"%d ",node);
}
fprintf(fout,"\n");
}
fclose(fin);
fclose(fout);
return 0;
}