Cod sursa(job #1513577)

Utilizator ZimmyZimmermann Erich Zimmy Data 29 octombrie 2015 18:48:59
Problema Componente tare conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <stack>
#include <vector>
#include <bitset>
#define N 100010
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
int n,m,i,j,np,Np[N];
vector<int> v[N],c[N];
stack<int> S,P;
void DFS(int);
bitset<N> used;
int main()
{
    f>>n>>m;
    for(;m;m--)
    {
        f>>i>>j;
        v[i].push_back(j);
    }
    for(i=1;i<=n;i++)
        if(!Np[i])
            DFS(i);
    g<<m<<'\n';
    for(i=1;i<=m;i++)
    {
        for(auto it:c[i])
            g<<it<<' ';
        g<<'\n';
    }
    return 0;
}
void DFS(int nod)
{
    Np[nod]=++np;S.push(nod);P.push(nod);
    for(auto it:v[nod])
    {
        if(!Np[it]){DFS(it);continue;}
        if(used[it])continue;
        while(Np[P.top()]>Np[it])P.pop();
    }
    if(nod==P.top())
    {
        m++;
        while(S.top()!=nod)
        {
            c[m].push_back(S.top());used[S.top()]=1;S.pop();
        }
        c[m].push_back(nod);S.pop();P.pop();used[nod]=1;
    }
}