Pagini recente » Cod sursa (job #305319) | Cod sursa (job #374138) | Cod sursa (job #651552) | Cod sursa (job #2613485) | Cod sursa (job #1142140)
#include<fstream>
using namespace std;
struct nod{int info ;
nod * urm;}v[100001],*p,*w[100001];
int cc[200001],poz[100001],poz2[100001],c[100001];
void df(int x,int y)
{
nod *q;
q=&v[x];
while(q->urm!=NULL)
{
if(poz[q->urm->info]!=0){if(q->urm->info!=y&&c[q->urm->info]==0)c[x]=q->urm->info;}
else {poz[q->urm->info]=x;
df(q->urm->info,x);}
if(q!=NULL)q=q->urm;
if(q==NULL)break;
}
}
int main()
{
int n,m,x,y,u=0,i,k=0;
ifstream fcin("biconex.in");
ofstream fcout("biconex.out");
fcin>>n>>m;
for(i=1;i<100001;i++)
{v[i].info=0;v[i].urm=NULL;w[i]=&v[i];}
for(i=1;i<=m;i++)
{ fcin>>x>>y;
v[x].info++;
p=new nod;
p->info=y;
p->urm=NULL;
w[x]->urm=p;
w[x]=p;
v[y].info++;
p=new nod;
p->info=x;
p->urm=NULL;
w[y]->urm=p;
w[y]=p;
}
poz[1]=-1;
df(1,-1);
x=n;
while(x!=1)
{
if(poz2[x]==0)
if(c[x]!=0)
{y=x;k++;
while(y!=c[x])
{cc[++u]=y;
poz2[y]=1;
y=poz[y];}
cc[++u]=y;
cc[++u]=-1;
}
x--;
}
x=n;
while(x!=1)
{
if(poz2[x]==0&&c[x]==0){k++;cc[++u]=x;poz2[x]=1;cc[++u]=poz[x];cc[++u]=-1;}
x--;
}
fcout<<k<<'\n';
u=1;
while(k!=0)
{
while(cc[u]!=-1)
{fcout<<cc[u]<<' ';u++;}
fcout<<'\n';u++;
k--;
}
return 0;
}