Pagini recente » Cod sursa (job #1540880) | Cod sursa (job #2080816) | Cod sursa (job #1499991) | Cod sursa (job #1888000) | Cod sursa (job #1113799)
#include <fstream>
#include <mem.h>
using namespace std;
ifstream f("date.in");
ofstream g("date.ok");
long int i,j,m,n,x,y,k;
int a[20000][20000];
int suc[100000],viz[100000];
int pred[100000],comb[100000],nr;
void succesor(int nod)
{int i;
viz[nod]=1;suc[nod]=1;
for(i=1;i<=n;i++)
if(a[nod][i]==1 && viz[i]==0) {succesor(i);
k++;}
}
void predecesor(int nod)
{int i;
viz[nod]=1;pred[nod]=1;
for(i=1;i<=n;i++)
if(a[i][nod]==1 && viz[i]==0){ predecesor(i);
k++;}
}
void combin(int suc[100],int pred[100],int comb[100])
{int i,j;
nr++;
for(i=1;i<=n;i++)
if(suc[i]==1 && pred[i]==1&&comb[i]==0) comb[i]=nr;;
g<<endl;
}
void afis(int comb[100])
{int i,j;
g<<nr<<endl;
for(i=1;i<=nr;i++)
{
for(j=1;j<=n;j++)
if(comb[j]==i)g<<j<<' ';
g<<endl;
}
}
int main()
{int i;
f>>n>>m;
for(i=1;i<=m;i++)
{f>>x>>y; a[x][y]=1;}
for(i=1;i<=n;i++)
{k=0;
memset(viz,0,sizeof(viz));
memset(suc,0,sizeof(suc));
memset(pred,0,sizeof(pred));
if(comb[i]==0)
{succesor(i);
memset(viz,0,sizeof(viz));
predecesor(i);
if(k) combin(suc,pred,comb);
}
}
afis(comb);
}