Cod sursa(job #2139279)

Utilizator aditzu7Adrian Capraru aditzu7 Data 22 februarie 2018 12:46:43
Problema Componente tare conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("ctc.in");
ofstream g("ctc.out");
struct nod{
int inf;
nod *urm;

}*l[100001],*lt[100001];
int perf,n,viz[100001],st[100001],k;
void adaug(nod*&l,int x){

nod*c;
c=new nod;
c->inf=x;
c->urm=l;l=c;
}
void df1(int i){
nod*c;
viz[i]=1;
for(c=l[i];c;c=c->urm)
    if(!viz[c->inf]) df1(c->inf);
st[++k]=i;

}void df2(int i){
nod*c;
viz[i]=1;g<<i<<" ";
for(c=lt[i];c;c=c->urm)
    if(!viz[c->inf]) df2(c->inf);


}void df3(int i){
nod*c;
viz[i]=1;
for(c=lt[i];c;c=c->urm)
    if(!viz[c->inf]) df3(c->inf);


}
int main()
{int m,i,x,y;
f>>n>>m;
for(i=1;i<=m;i++){
    f>>x>>y;
    adaug(l[x],y);
    adaug(lt[y],x);


}
for(i=1;i<=n;i++) if(!viz[i]) df1(i);
memset(viz,0,sizeof(viz));
for(i=n;i>=1;i--){
    if(!viz[st[i]]){df3(st[i]);
        perf++;}

}
g<<perf<<'\n';
memset(viz,0,sizeof(viz));
for(i=n;i>=1;i--){
    if(!viz[st[i]]){df2(st[i]);
        g<<'\n';}

}
    return 0;
}