Cod sursa(job #2470913)

Utilizator eusebiu_alexandruMorar Eusebiu eusebiu_alexandru Data 9 octombrie 2019 21:06:23
Problema Componente tare conexe Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include<fstream>
#define mod 666013
using namespace std;
ifstream f ("ctc.in");
ofstream g("ctc.out");
int i,j,suc[100000],pred[100000],a[100000][100000],star[100000],nr,n,stiva[100000],coloana,vecin,k,varf,m;
void dfs1()
{
 for(k=1;k<=n;k++)
    stiva[k]=0;
  varf=0;
  stiva[++varf]=i;
  while(varf)
  {
  int ok=0;
  int element=stiva[varf];
  for(k=1;k<=n;k++)
       if(a[element][k]==1 && suc[k]==0)
                suc[k]=nr,stiva[++varf]=k,ok=1;
 if(ok==0)
      varf--;
  }
}
void dfs2()
{
    for(k=1;k<=n;k++)
          stiva[k]=0;
    varf=0,stiva[++varf]=i;
    while(varf)
    {
        int ok=0;
        int element=stiva[varf];
        for(k=1;k<=n;k++)
        if(a[k][element]==1 && pred[k]==0)
               pred[k]=nr,stiva[++varf]=k,ok=1;
     if(ok==0)
         varf--;
    }
}
int main()
{
 f>>n>>m;
 while(m)
 {
    m--;
    f>>i>>j;
    a[i][j]=1;
 }
 nr=1;
 for(i=1;i<=n;i++)
 {
     if(suc[i]==0)
     {
         suc[i]=nr;
         dfs1();
         dfs2();
         for(j=1;j<=n;j++)
             if(suc[j]!=pred[j])
                   suc[j]=0,pred[j]=0;
        nr++;
     }
 }
 g<<nr-1<<endl;
 for(i=1;i<=nr-1;i++)
 {
     for(j=1;j<=n;j++)
           if(suc[j]==i)
                g<<j<<" ";
   g<<endl;
 }
}