Cod sursa(job #2011202)

Utilizator patcasrarespatcas rares danut patcasrares Data 15 august 2017 16:18:38
Problema Componente tare conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include<fstream>
#include<iostream>
#include<vector>
#include<stack>
#define DN 100005
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector<int>v[DN];
vector<int>r[DN];
stack<int>s;
int n,m,x,y,a[DN],e[DN],low[DN],rez,nr;
void dfs(int x)
{
    s.push(x);
    nr++;
    low[x]=a[x]=nr;
    e[x]=1;
    for(auto i:v[x])
    {
        if(a[i]==0)
        {
            a[i]=a[x]+1;
            dfs(i);
            low[x]=min(low[x],low[i]);
        }
        else
            if(e[i])
                low[x]=min(low[x],low[i]);
    }
    if(a[x]==low[x])
    {
        rez++;
        int nod;
        do
        {
            nod=s.top();
            s.pop();
            e[nod]=0;
            r[rez].push_back(nod);
        }while(nod!=x);
    }
}
int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y;
        v[x].push_back(y);
    }
    for(int i=1;i<=n;i++)
        if(a[i]==0)
        {
            a[i]=1;
            dfs(i);
        }
    fout<<rez<<'\n';
    for(int i=1;i<=rez;i++)
    {
        for(auto j:r[i])
            fout<<j<<' ';
        fout<<'\n';
    }
}