Cod sursa(job #1503639)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 16 octombrie 2015 17:55:09
Problema Componente tare conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
#include<algorithm>
#include<stack>
#include<vector>
#define MAX 100005
#define pb push_back
using namespace std;int n,m,i,j,x,y,ind=1,k[MAX],z[MAX];bool o[MAX];vector<int>l[MAX],c;vector<vector<int> >C;stack<int >s;void t(int v);int main(){freopen("t.in","r",stdin);freopen("t.out","w",stdout);scanf("%d%d",&n,&m);for(i=0;i<m;i++){scanf("%d%d",&x,&y);l[x].pb(y);}for(i=1;i<=n;i++)if(!k[i])t(i);printf("%d\n",C.size());for(i=0;i<C.size();i++){for(j=0;j<C[i].size();j++)printf("%d",C[i][j]);printf("\n");}return 0;}void t(int v){int w;k[v]=ind;z[v]=ind++;s.push(v);o[v]=1;for(int i=0;i<l[v].size();i++){if(!k[l[v][i]]){t(l[v][i]);z[v]=min(z[v],z[l[v][i]]);}else if(o[l[v][i]])z[v]=min(z[v],k[l[v][i]]);}if(z[v]==k[v]){do{w=s.top();s.pop();o[w]=0;c.pb(w);}while(v!=w);C.pb(c);c.clear();}}