Cod sursa(job #470811)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 15 iulie 2010 16:52:50
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<algorithm>
using namespace std;
#include<vector>
#include<queue>
#include<bitset>

#define pb push_back
#define mp make_pair
#define fs first
#define sc second
#define DIM 100005

vector <int> lst[DIM];
vector <pair<int,int> > sol;
bitset <DIM> v;
int n,m;

void bf ()
{
    queue <int> q;
    int nr,i;

    q.push (n);
    v[n]=1;
    while(!q.empty ())
    {
        nr=q.front ();
        for(i=0;i<(int)lst[nr].size ();++i)
            if(!v[lst[nr][i]])
            {
                v[lst[nr][i]]=1;
                sol.pb (mp(nr,lst[nr][i]));
                q.push (lst[nr][i]);
            }
        q.pop ();
    }
}

bool check ()
{
    int i;
    for(i=1;i<=n;++i)
        if(!v[i])
            return 1;
    return 0;
}
int main ()
{
    freopen("mesaj4.in","r",stdin);
    freopen("mesaj4.out","w",stdout);
    int i,nr1,nr2;

    scanf("%d%d",&n,&m);
    for(i=1;i<=m;++i)
    {
        scanf("%d%d",&nr1,&nr2);
        lst[nr1].pb (nr2);
        lst[nr2].pb (nr1);
    }
    bf ();
    if(check ())
    {
        printf("-1");
        return 0;
    }
    printf("%d\n",2*(int)sol.size ());
    for(i=(int)sol.size ()-1;i>=0;--i)
        printf("%d %d\n",sol[i].sc,sol[i].fs);
    for(i=0;i<(int)sol.size ();++i)
        printf("%d %d\n",sol[i].fs,sol[i].sc);
    return 0;
}