Nu aveti permisiuni pentru a descarca fisierul android.png

Cod sursa(job #3296225)

Utilizator luca._.solosluca solos luca._.solos Data 12 mai 2025 10:24:04
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;

const int nmax=1e5+3;
vector <int> v[nmax], from[nmax];
bool vis[nmax];
int post[nmax];
int nr=1;
vector <int> ans[nmax];

void dfs(int nod)
{
    vis[nod]=true;
    for(auto i:v[nod])
    {
        if(!vis[i])
            dfs(i);
    }
    post[nr++]=nod;
}

void dfs2(int nod)
{
    vis[nod]=false;
    ans[nr].push_back(nod);
    for(auto i:from[nod])
    {
        if(vis[i])
        {
            dfs2(i);
        }
    }
}

int main()
{
    ifstream cin("ctc.in");
    ofstream cout("ctc.out");

    int n, m;
    cin>>n>>m;
    for(int i=1; i<=m; i++)
    {
        int a, b;
        cin>>a>>b;
        v[a].push_back(b);
        from[b].push_back(a);
    }
    for(int i=1; i<=n; i++)
    {
        if(!vis[i])
            dfs(i);
    }

    nr=0;
    for(int i=n; i>=1; i--)
    {
        if(vis[post[i]])
        {
            nr++;
            dfs2(post[i]);
        }
    }

    cout<<nr<<'\n';
    for(int i=1; i<=nr; i++)
    {
        for(auto j:ans[i])
            cout<<j<<' ';
        cout<<'\n';
    }

    return 0;
}