Cod sursa(job #1009287)

Utilizator mlupseLupse-Turpan Mircea mlupse Data 12 octombrie 2013 20:19:46
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<fstream>
#include<vector>

#define NMAX 100005
#define max(a,b) ((a)>(b)?(a):(b))

using namespace std;

ifstream f("mesaj4.in");
ofstream g("mesaj4.out");

vector<int>G[NMAX];
vector< pair <int,int> > sol;
bool ok;
bool used[NMAX];

int N,M;

void Read ( void )
{
    f>>N>>M;

    for(int i(1) ; i <= M ; ++i )
    {
        int x,y;
        f>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    f.close();

}

void DepthFirstSearch( int node )
{
    used[node]=true;
    for( vector<int>::iterator it=G[node].begin() ; it!=G[node].end() ; ++it )
        if(!used[*it])
    {
        sol.push_back(make_pair(node,*it));
        DepthFirstSearch(*it);
    }

}
void Solve( void )
{ DepthFirstSearch(1);
    for(int i(1) ; i <= N ; ++i )
        if( !used[i])
    {
        g<<"-1";
        ok=true;
        return;
    }
}
void Print ( void )
{
    g<<(N-1)*2<<"\n";
    for( vector< pair<int,int> > ::iterator it= sol.end()-1 ; it != sol.begin()-1 ;  --it )
    g<<it->second<<" "<<it->first<<"\n";

    for( vector< pair<int,int> > ::iterator it= sol.begin() ; it != sol.end() ;  ++it )
    g<<it->first<<" "<<it->second<<"\n";

}
int main ( void )
{
    Read();
    Solve();
    if( !ok  )
    Print();
    return 0;
}