Cod sursa(job #1438897)

Utilizator SorinmocanuFMI Sorin Mocanu Sorinmocanu Data 21 mai 2015 02:20:30
Problema Componente tare conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

ifstream f("ctc.in");
ofstream g("ctc.out");

int N,M,S,i,j,viz[100005],x,y,k,parcurgere[100005];
vector <int> v[100005],t[100005],coada[100005];

void dfs(int nod)
{
    viz[nod]=2;
    coada[S].push_back(nod);
    for(int j=0;j<v[nod].size();j++)
        if(viz[v[nod][j]]==1)
            dfs(v[nod][j]);
}

void dfstrans(int nod)
{
    viz[nod]=1;

    for(int j=0;j<t[nod].size();j++)
        if(viz[t[nod][j]]==0)
            dfstrans(t[nod][j]);
    k++;
    parcurgere[k]=nod;
}

int main()
{
    f>>N>>M;

    for(i=1;i<=M;i++)
    {
        f>>x>>y;
        v[x].push_back(y);
        t[y].push_back(x);
    }

    for(i=1;i<=N;i++)
        if(viz[i]==0)
            dfstrans(i);

    for(i=N;i>=1;i--)
        if(viz[parcurgere[i]]==1)
        {
            S++;
            dfs(parcurgere[i]);
        }

    g<<S<<"\n";

    for(i=1;i<=S;i++)
    {
        for(j=0;j<coada[i].size();j++)
            g<<coada[i][j]<<" ";
        g<<"\n";
    }

    f.close();
    g.close();
    return 0;
}