Cod sursa(job #3336108)

Utilizator Stefan_NicaStefan Nica Stefan_Nica Data 24 ianuarie 2026 10:33:40
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <bits/stdc++.h>
#define ull unsigned long long
#define ll long long
#define MOD 1000000007
#define NMAX 2e6

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

std::vector<std::vector<int>> v(100001), t(100001);
bool viz[100001], viz1[100001];
void dfs(int nod, std::vector<int>& temp), dfs1(int nod, std::vector<int>& st);
int main(){
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);
    std::cout.tie(NULL);
    f.tie(NULL);
    g.tie(NULL);

    int n, m;
    f >> n >> m;
    for(int i = 1, x, y; i <= m; ++i)
        f >> x >> y, v[x].push_back(y), t[y].push_back(x);
    std::vector<int> temp;
    for(int i = 1; i <= n; ++i)
        if(!viz[i])
            dfs(i, temp);
    reverse(temp.begin(), temp.end());
    std::vector<std::vector<int>> ans;
    for(auto i : temp)
        if(!viz1[i]){
            std::vector<int> st;
            dfs1(i, st);
            std::sort(st.begin(), st.end());
            ans.push_back(st);
        }
    g << ans.size() << '\n';
    for(auto i : ans){
        for(auto it : i)
            g << it << ' ';
        g << '\n'; 
    }
    return 0;
}
void dfs(int nod, std::vector<int>& temp){
    viz[nod] = 1;
    for(auto i : v[nod])
        if(!viz[i])
            dfs(i, temp);
    temp.push_back(nod);
}
void dfs1(int nod, std::vector<int>& st){
    viz1[nod] = 1;
    st.push_back(nod);
    for(auto i : t[nod])
        if(!viz1[i])    
            dfs1(i, st);
}