Pagini recente » Cod sursa (job #2159769) | Cod sursa (job #2825976) | Cod sursa (job #1037846) | Cod sursa (job #1606549) | Cod sursa (job #807007)
Cod sursa(job #807007)
#include<fstream>
using namespace std;
const int NM = 260;
typedef struct lnod{
int vf;
struct lnod *next;
}*Nod;
Nod a[NM];
int L[NM],lant,pr[NM],term[NM],dex[NM],din[NM];
bool viz[NM];
ofstream fout("strazi.out");
void add(int x,int y){
Nod p = new lnod;
p->vf=y;
p->next=a[x];
a[x]=p;
}
void dfs2(int nod){
viz[nod]=0;
fout<<nod<<' ';
for(Nod p=a[nod];p;p=p->next)
if(viz[p->vf])dfs2(p->vf);
}
void dfs(int nod){
L[nod]=lant;
viz[nod]=1;
if(!a[nod])term[lant]=nod;
for(Nod p=a[nod];p;p=p->next)
if(!viz[p->vf])
{
if(p==a[nod])dfs(p->vf);
else
{
din[p->vf]--;
++lant;
pr[lant]=p->vf;
dfs(p->vf);
}
}
}
int main(){
ifstream fin("strazi.in");
int N,M,i,x,y;
fin>>N>>M;
for(i=1;i<=M;++i)
{
fin>>x>>y;
add(x,y);
dex[x]++; din[y]++;
}
for(i=1;i<=N;++i)
if(!viz[i]){ ++lant; pr[lant]=i; dfs(i); }
fout<<(lant-1)<<'\n';
for(i=1;i<lant;++i)
{
fout<<(term[i])<<' '<<(pr[i+1])<<'\n';
add(term[i],pr[i+1]);
}
dfs2(pr[1]);
return 0;
}