Pagini recente » Profil allecs1112 | Monitorul de evaluare | Cod sursa (job #3157592) | Rating Vornicu Claudiu - Octavian (claud1u) | Cod sursa (job #465944)
Cod sursa(job #465944)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
int lung,maxim,x,y,n,M,poz,cost[1001],pred[1001];
bool f[100001],m[1001][1001];
vector<int> v[100001];
queue<int> Q;
void dfs(int nod)
{
for(vector<int>::iterator it=v[nod].begin();it!=v[nod].end();it++)
if(!f[*it])
{
f[*it]=true;
dfs(*it);
}
}
void bf(int nod)
{
cost[nod]=1;
Q.push(nod);
while(!Q.empty())
{
int x=Q.front();
for(vector<int>::iterator it=v[x].begin();it!=v[x].end();it++)
if(cost[*it]==0)
{
cost[*it]=cost[x]+1;
pred[*it]=x;
Q.push(*it);
}
Q.pop();
}
}
void df(int nod)
{
for(int i=1;i<=n;i++)
if(pred[i]==nod && !f[i])
{
lung++;
f[i]=true;
df(i);
}
}
void dfafis1(int nod)
{
for(int i=1;i<=n;i++)
if(pred[i]==nod && !f[i])
{
f[i]=true;
dfafis1(i);
printf("%d %d\n",i,nod);
}
}
void dfafis2(int nod)
{
for(int i=1;i<=n;i++)
if(pred[i]==nod && !f[i])
{
f[i]=true;
printf("%d %d\n",nod,i);
dfafis2(i);
}
}
int main()
{
freopen("mesaj4.in","r",stdin);
freopen("mesaj4.out","w",stdout);
scanf("%d%d",&n,&M);
for(int i=1;i<=M;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
f[1]=true;
dfs(1);
for(int i=1;i<=n;i++)
if(f[i]==false)
{
printf("-1");
return 0;
}
for(int i=1;i<=n;i++)
{
int nrf=0;
for(vector<int>::iterator it=v[i].begin();it!=v[i].end();it++)
nrf++;
if(nrf>maxim)
maxim=nrf, poz=i;
}
bf(poz);
for(int i=1;i<=n;i++)
f[i]=false;
f[poz]=true;
lung=0;
df(poz);
printf("%d\n",2*lung);
for(int i=1;i<=n;i++)
f[i]=false;
f[poz]=true;
dfafis1(poz);
for(int i=1;i<=n;i++)
f[i]=false;
f[poz]=true;
dfafis2(poz);
return 0;
}