Cod sursa(job #1113799)

Utilizator lucamateiLuca Matei lucamatei Data 20 februarie 2014 22:04:00
Problema Componente tare conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#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);


}