Cod sursa(job #2343549)

Utilizator RazvanPanaiteRazvan Panaite RazvanPanaite Data 14 februarie 2019 08:53:54
Problema Componente tare conexe Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.66 kb
#include <bits/stdc++.h>
#define DMAX 100010

using namespace std;

ifstream fin("ctc.in");
ofstream fout("ctc.out");

vector <int> M[DMAX];
vector <int> Gt[DMAX];
vector <int> comp[DMAX];
queue <int> Coada;

int n,cate;
bool g[DMAX],gt[DMAX],uz[DMAX];

void citire();
void bfs(int node);
void bfst(int node);

int main()
{int i,j;
 citire();
 for(i=1;i<=n;i++)
     if(!uz[i])
        {uz[i]=true;
         bfs(i);
         bfst(i);
         comp[++cate].push_back(i);
         for(j=i+1;j<=n;j++)
             if(g[j] && gt[j])
                {comp[cate].push_back(j);
                 uz[j]=true;
                }
         memset(g,0,sizeof(g));
         memset(gt,0,sizeof(gt));
        }
 fout<<cate<<'\n';
 for(i=1;i<=cate;i++)
     {for(j=0;j<comp[i].size();j++)
          fout<<comp[i][j]<<' ';
      fout<<'\n';
     }
 return 0;
}
void citire()
{int i,m,x,y;
 fin>>n>>m;
 for(i=1;i<=m;i++)
     {fin>>x>>y;
      M[x].push_back(y);
      Gt[y].push_back(x);
     }
}
void bfs(int node)
{int i;
 g[node]=true;
 Coada.push(node);
 while(!Coada.empty())
       {for(i=0;i<M[Coada.front()].size();i++)
            if(!g[M[Coada.front()][i]])
               {g[M[Coada.front()][i]]=true;
                Coada.push(M[Coada.front()][i]);
               }
        Coada.pop();
       }
}
void bfst(int node)
{int i;
 gt[node]=true;
 Coada.push(node);
 while(!Coada.empty())
       {for(i=0;i<Gt[Coada.front()].size();i++)
            if(!gt[Gt[Coada.front()][i]])
               {gt[Gt[Coada.front()][i]]=true;
                Coada.push(Gt[Coada.front()][i]);
               }
        Coada.pop();
       }
}