Pagini recente » Cod sursa (job #1012757) | Cod sursa (job #1878916) | Cod sursa (job #2119671) | Cod sursa (job #1015921) | Cod sursa (job #2395670)
#include <bits/stdc++.h>
#define Nmax 100
using namespace std;
bool onStack[Nmax];
int d[Nmax];
int l[Nmax];
int index=1;
stack <int> s;
vector <int> G[Nmax];
vector <int> comp[Nmax];
int k;
void tare_conexe(int node){
d[node]=index;
l[node]=index;
index++;
s.push(node);
onStack[node]=true;
for(int i=0;i<G[node].size();i++){
int dest=G[node][i];
if(d[dest]==0){
tare_conexe(dest);
l[node]=min(l[node],l[dest]);
}else if(onStack[dest]){
l[node]=min(l[node],d[dest]);
}
}
if(d[node]==l[node]){
int dest=s.top();
while(dest!=node){
s.pop();
onStack[dest]=false;
comp[k].push_back(dest);
dest=s.top();
}
s.pop();
comp[k].push_back(node);
k++;
}
}
int main()
{
FILE *fin, *fout;
int n,m,i,j;
fin=fopen("ctc.in","r");
fout=fopen("ctc.out","w");
fscanf(fin,"%d%d",&n,&m);
for(m;m>0;m--){
fscanf(fin,"%d%d",&i,&j);
G[i].push_back(j);
}
for(i=1;i<=n;i++){
if(d[i]==0){
tare_conexe(i);
}
}
fprintf(fout,"%d\n",k);
for(i=0;i<k;i++){
for(j=0;j<comp[i].size();j++){
fprintf(fout,"%d ",comp[i][j]);
}
fprintf(fout,"\n");
}
fclose(fin);
fclose(fout);
return 0;
}