Pagini recente » Cod sursa (job #2991269) | Fotbal3 | Cod sursa (job #1834069) | Cod sursa (job #2030812) | Cod sursa (job #465853)
Cod sursa(job #465853)
#include <fstream>
using namespace std;
struct relatie{int x,y;};
bool use[100001];
int coada[100001],pr[100001],n,m,p=0,u=1;
relatie v[200001];
ifstream in("mesaj4.in");
ofstream out("mesaj4.out");
int bsearch(int x)
{
int i,step=1<<17;
for (i=0;step;step>>=1)
if (i+step<=m && v[i+step].x<x)
i+=step;
return i+1;
}
void dfs()
{
int x,i;
coada[1]=1;
use[1]=true;
while (p<u)
for (x=coada[++p],i=bsearch(x);v[i].x==x;i++)
if (!use[v[i].y])
{
use[v[i].y]=true;
pr[++u]=x;
coada[u]=v[i].y;
}
}
void scr(int x)
{
if (x==1)
return;
out<<coada[x]<<" "<<pr[x]<<"\n";
scr(x-1);
out<<pr[x]<<" "<<coada[x]<<"\n";
}
bool cmp(relatie a,relatie b)
{
return a.x<b.x || a.x==b.x && a.y<b.y;
}
int main()
{
int i,x,y;
in>>n>>m;
for (i=1;i<=m;i++)
{
in>>x>>y;
v[i].x=x;v[i].y=y;
v[i+m].x=y;v[i+m].y=x;
}
m<<=1;
sort(v+1,v+m+1,cmp);
dfs();
if (u!=n)
{
out<<"-1\n";
return 0;
}
out<<2*(n-1)<<"\n";
scr(n);
return 0;
}