Pagini recente » Cod sursa (job #2349597) | Cod sursa (job #2755260) | Cod sursa (job #2609663) | Cod sursa (job #495361) | Cod sursa (job #3226881)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <queue>
#define MAXN 100005
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){
seen[node]=1;
for(int neigh : graf[node]){
if(seen[neigh]==0){
DFS(neigh);
}
}
parc.push_back(node);
}
void DFS2(int node,int poz){
seen[node]=1;
for(int neigh : ginv[node]){
if(seen[neigh]==0){
DFS2(neigh,poz);
}
}
ans[poz].push_back(node);
}
int main(){
int n,m,i,x,y,k;
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);
}
}
for(i=1;i<=n;i++){
seen[i]=0;
}
k=0;
while(!parc.empty()){
int node=parc.back();
parc.pop_back();
if(seen[node]==0){
DFS2(node,k);
k++;
}
}
fprintf(fout,"%d\n",k);
for(i=0;i<k;i++){
for(int node : ans[i]){
fprintf(fout,"%d ",node);
}
fprintf(fout,"\n");
}
fclose(fin);
fclose(fout);
return 0;
}