Cod sursa(job #951868)

Utilizator superman_01Avramescu Cristian superman_01 Data 21 mai 2013 23:08:50
Problema Mesaj4 Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 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 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 )
{
    for(int i(1) ; i <= N ; ++i )
        if( !used[i])
    DepthFirstSearch(i);
}
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();
    Print();
    return 0;
}