Cod sursa(job #478830)

Utilizator nandoLicker Nandor nando Data 20 august 2010 15:43:19
Problema Mesaj4 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <utility>
#include <bitset>
using namespace std;

FILE* fin = fopen("mesaj4.in", "r");
FILE* fout = fopen("mesaj4.out", "w");

#define MAXN 100005

vector<int> g[MAXN];
vector<pair<int, int> > sol;
bitset<MAXN> viz;

typedef vector<int>::iterator iter;
typedef vector<pair<int, int> >::iterator piter;

void dfs(int nod){
    if(viz[nod])
        return;

    viz[nod] = true;

    for(iter it = g[nod].begin(); it != g[nod].end(); ++it){
        if(!viz[*it]){
            sol.push_back(make_pair(*it, nod));
            dfs(*it);
        }
    }
}

int main(){
    int n, m;
    fscanf(fin, "%d %d", &n, &m);

    for(int i = 0, x, y; i < m; ++i){
        fscanf(fin, "%d %d\n", &x, &y);
        g[x].push_back(y);
        g[y].push_back(x);
    }

    dfs(1);

    for(int i = 0; i < n; ++i){
        if(!viz[i]){
            fprintf(fout,"-1\n");

            fclose(fin);
            fclose(fout);
            return EXIT_SUCCESS;

        }
    }

    fprintf(fout, "%d\n", 2 * n - 2);

    for(piter it = sol.end(); it != sol.begin(); --it){
        fprintf(fout, "%d %d\n", it->first, it->second);
    }
    for(piter it = sol.begin(); it != sol.end() ; ++it){
        fprintf(fout, "%d %d\n", it->second, it->first);
    }

    fclose(fin);
    fclose(fout);
    return EXIT_SUCCESS;
}