Cod sursa(job #2122991)

Utilizator AsttridMocanu Ada Astrid Asttrid Data 5 februarie 2018 18:13:55
Problema Componente tare conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=100007;
ifstream in("ctc.in");
ofstream out("ctc.out");

vector<int>L[N],Lt[N],ctc[N];
int n,m,st[N],nrc,top;
bool viz[N];
void citire(){
in>>n>>m;
int i,x,y;
for(i=1;i<=m;i++){
    in>>x>>y;
    L[x].pb(y);
    Lt[y].pb(x);
}}

void dfs1(int x){
int i,z;
viz[x]=1;
st[++top]=x;
for(i=0;i<L[x].size();i++)
{z=L[x][i];
if(!viz[z])dfs1(z);
}
}


void dfs2(int x){
int i,z;
viz[x]=1;

for(i=0;i<Lt[x].size();i++){
    z=Lt[x][i];
    if(!viz[z])dfs2(z);}
    ctc[nrc].pb(x);
}

void afisare(){
int i,j;
out<<nrc<<"\n";
for(i=1;i<=nrc;i++)
    {for(j=0;j<ctc[i].size();j++)
    out<<ctc[i][j]<<" ";
    out<<"\n";
}}


void rez(){
int i,y;
for(i=1;i<=n;i++)
if(!viz[i])dfs1(i);
for(i=1;i<=n;i++)viz[i]=0;
while(top)
{y=st[top--];
if(!viz[y]){
    ++nrc;
    dfs2(y);}
}}

int main(){
citire();
rez();
afisare();
in.close();
out.close();
return 0;}