Pagini recente » Cod sursa (job #468861) | Cod sursa (job #724408) | Cod sursa (job #1498022) | Cod sursa (job #267827) | Cod sursa (job #2139279)
#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;
}