Cod sursa(job #1644996)

Utilizator robx12lnLinca Robert robx12ln Data 10 martie 2016 10:35:24
Problema Mesaj4 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
FILE * fin = fopen("mesaj4.in","r");
FILE * fout = fopen("mesaj4.out","w");
int f[100005],n,m,a,b;
vector<int> v[100005];
void dfs( int nod ){
    f[nod] = 1;
    for( int i = 0; i < v[nod].size(); i++ ){
        int vecin = v[nod][i];
        if( f[vecin] == 0 ){
            dfs( vecin );
        }
    }
}
void dfs1( int nod, int tata ){
    f[nod] = 1;
    for( int i = 0; i < v[nod].size(); i++ ){
        int vecin = v[nod][i];
        if( f[vecin] == 0 ){
            dfs1( vecin, nod );
        }
    }
    if( tata != 0 ){
        fprintf( fout, "%d %d\n", nod, tata );
    }
}
void dfs2( int nod ){
    f[nod] = 1;
    for( int i = 0; i < v[nod].size(); i++ ){
        int vecin = v[nod][i];
        if( f[vecin] == 0 ){
            fprintf( fout, "%d %d\n", nod, vecin );
            dfs( vecin );
        }
    }
}
int main(){
    fscanf( fin, "%d%d", &n, &m );
    for( int i = 1; i <= m; i++ ){
        fscanf( fin, "%d%d", &a, &b );
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(1);
    for( int i = 1; i <= n; i++ ){
        if( f[i] == 0 ){
            fprintf( fout, "-1\n" );
            return 0;
        }
    }
    fprintf( fout, "%d\n", 2 * n - 2 );
    memset( f, 0, sizeof(f) );
    dfs1(1,0);
    memset( f, 0, sizeof(f) );
    dfs2(1);
    return 0;
}