Cod sursa(job #2523812)

Utilizator PatrascuAdrian1Patrascu Adrian Octavian PatrascuAdrian1 Data 14 ianuarie 2020 19:26:03
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

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

const int Nmax = 1e5 + 5;
bool seen[Nmax];
int S[Nmax];
int N,M,L;
vector<int> G[Nmax],Gt[Nmax];
static inline void dfs(int node) {
    seen[node] = 1;
    for(auto i : G[node])
        if(!seen[i])
            dfs(i);
    S[++L] = node;
}

static inline void afis(int node, bool K) {
    seen[node] = 1;
    if(K)
        out << node << " ";
    for(auto i : Gt[node])
        if(!seen[i])
            afis(i,K);
}

int main() {
    ios_base::sync_with_stdio(0);
    in.tie(0),out.tie(0);
    in >> N >> M;
    while(M--) {
        int x,y;
        in >> x >> y;
        G[x].emplace_back(y);
        Gt[y].emplace_back(x);
    }
    for(int i = 1; i <= N; ++i)
        if(!seen[i])
            dfs(i);
    M = 0;
    memset(seen,0,sizeof(seen));
    for(int i = N ; i >= 1; --i)
        if(!seen[S[i]])
            afis(S[i],0),M++;
    out << M << '\n';
    memset(seen,0,sizeof(seen));
    for(int i = N ; i >= 1; --i)
        if(!seen[S[i]])
            afis(S[i],1),out << '\n';

    return 0;
}