Pagini recente » Cod sursa (job #520412) | Cod sursa (job #450872) | Cod sursa (job #2782836) | Cod sursa (job #1647831) | Cod sursa (job #807009)
Cod sursa(job #807009)
#include<fstream>
using namespace std;
typedef struct celula{
int nod,hm;
celula *next;
}*lista;
lista graf[266],v;
int n,m,x,y,lant[256][256],nrl,i,nrn[256],h[266];
bool viz[266];
void dfs(int nod){
if (graf[nod]==0) h[nod]=1; else
for (lista p=graf[nod]; p; p=p->next)
if (h[p->nod]==0) {dfs(p->nod); h[nod]=max(h[nod],h[p->nod]+1);}
}
void form(int nod){
viz[nod]=1;
for (lista p=graf[nod]; p; p=p->next)
if (viz[p->nod]==0&&h[p->nod]==h[nod]-1){++nrn[nrl]; lant[nrl][nrn[nrl]]=p->nod; form(p->nod); break; }
}
int main(void){
ifstream fin("strazi.in");
ofstream fout("strazi.out");
fin>>n>>m;
for (i=1; i<=m; ++i){
fin>>x>>y;
v=new celula; v->nod=y; v->next=graf[x]; graf[x]=v;
}
dfs(1);
for (i=1; i<=n; ++i)if (viz[i]==0){++nrl; nrn[nrl]=1; lant[nrl][1]=i; form(i);}
fout<<nrl-1<<"\n";
for (i=1; i<nrl; ++i)fout<<lant[i][nrn[i]]<<" "<<lant[i+1][1]<<"\n";
for (i=1; i<=nrl; ++i)
for (int j=1; j<=nrn[i]; ++j) fout<<lant[i][j]<<" ";
return(0);
}