Cod sursa(job #1251328)

Utilizator andariel97puscasu robert andariel97 Data 29 octombrie 2014 11:59:30
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>
#define NMAX 100000

using namespace std;

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

void citire();
void f1(int i);
void f2(int i);

int lg,nr,n,m,i;
bool uz[100000],uz2[100000],post_ord[100000];

vector<int>g[NMAX];
vector<int>gt[NMAX];

int main()
{
    citire();
    for(i=1;i<=n;i++)
        if(uz[i]==0)
            f1(i);
    for(i=lg;i>=1;i--)
        if(uz2[i]==0)
            {
                f2(i);
                nr++;
            }
    fout<<nr;
    return 0;
}

void f2(int i)
{
    unsigned int j;
    uz2[i]=1;
    for(j=1;j<=gt[i].size();j++)
        if(uz2[j]==0)
            {
                f2(j);
            }
}

void f1(int i)
{
    unsigned int j;
    uz[i]=1;
    for(j=1;j<=g[i].size();j++)
        if(uz[i]==0)
            {
                post_ord[++lg]=j;
                f1(j);
            }
    post_ord[++lg]=i;
}


void citire()
{
    int x,y;
    fin>>n>>m;
    for(i=1;i<n;i++)
        {
            fin>>x>>y;
            g[x].push_back(y);
            gt[y].push_back(x);
        }
}