Cod sursa(job #2113807)

Utilizator omegasFilip Ion omegas Data 25 ianuarie 2018 06:42:22
Problema Componente tare conexe Scor 52
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>
using namespace std;

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

struct graf{
int nod;
int dist;
graf* next;
};

graf* gt[100001];
graf* g[100001];
int comp[100001];
int c=1;
int counter=0;
int st[100001];
int k = 1;
int n;

void add(int a, int b, graf* v[])
{
    graf* q = new graf;
    q->nod  = b;
    q->next = v[a];
    v[a] = q;
}

void DFS(int node, graf* v[]){
    comp[node] = c;
    graf *p;
    p=v[node];
    while(p!=NULL){
        if(comp[p->nod] == 0)
            DFS(p->nod, v);
        p = p->next;
    }

    if(k<=n)
        st[k] = node,
        ++k;
}


int main()
{
    int i,x,y;
    int m;
    fin >> n >> m;
    for(i=1;i<=m;++i){
    fin >> x >> y;
    add(y,x,gt);

    add(x,y,g);
    }

    for(i=1;i<=n;++i){
        if(comp[i]==0)
            DFS(i,gt),
            ++c;
    }


    for(i=1;i<=n;++i){
        comp[i] = 0;
    }
    for(i=1;i<=n;++i){
        cout << st[i] << " ";
    }


    c = 1;
    for(i=n;i>=1;--i){
        if(comp[st[i]]==0)
            DFS(st[i],g),
            ++c;
    }

    fout << c - 1 << endl;
    for(i=1;i<=n;++i){
        fout << st[i] << " ";
        if(comp[st[i+1]]!=comp[st[i]])
            fout << "\n";
    }

    return 0;
}