Cod sursa(job #3033146)

Utilizator 2080Cristian 2080 Data 23 martie 2023 14:10:15
Problema Componente tare conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
using namespace std;

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

vector<vector<int>> l(300001), lt(300001), cmps;

int visited[300001]={0};
stack<int> q={};
int n,m;

void dfs1(int x){
    if(visited[x]==0) {
        visited[x] = 1;
        for (const auto &item: l[x]) {
            if (visited[item] == 0) {
                dfs1(item);
            }
        }

        q.push(x);
    }

}

void dfs2(int x,vector<int> &cmp){
    if(visited[x]==0)
      cmp.push_back(x);
      visited[x]=1;
        for (const auto &item: lt[x]) {
            if(visited[item]==0){
                dfs2(item,cmp);
            }

        }

}



int main(){
    fin>>n>>m;

    for(int i = 0;i<m; ++i){
        int x,y;
        fin>>x>>y;
        l[x].push_back(y);
        lt[y].push_back(x);
    }
    for(int i =1;i<=n;++i){
        if(visited[i]==0)
            dfs1(i);
    }
int c= 0;
    memset(visited,0,sizeof(visited));
    while(!q.empty()){
        int k = q.top();
        q.pop();
        vector<int> cmp={};
        if(visited[k]==0) {
            dfs2(k, cmp);
            c+=1;
            cmps.push_back(cmp);
        }
    }
fout<<c;
    for (const auto &item: cmps) {
        fout<<endl;

        for (const auto &item1: item) {
            fout<<item1<<" ";

        }

    }

}