Cod sursa(job #1868229)

Utilizator DanielRusuDaniel Rusu DanielRusu Data 4 februarie 2017 18:22:24
Problema Mesaj4 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <bitset>

using namespace std;

#define DIM 100005

vector <vector <int> > G;
vector <pair <int, int> > ans;
bitset <DIM> freq;
int N, M;

void DF(int);

int main() {
    freopen("mesaj4.in","r",stdin);
    freopen("mesaj4.out","w",stdout);

    scanf("%d %d\n", &N, &M);

    G.resize(N + 1);

    int x, y;
    for(int i = 1; i <= M; ++i) {
        scanf("%d %d\n", &x, &y);

        G[x].push_back(y);
        G[y].push_back(x);
    }

    DF(1);

    if(ans.size() == (unsigned int) N - 1) {
        cout << 2 * (N - 1) << '\n';

        vector <pair <int, int> >::reverse_iterator it = ans.rbegin();

        for(; it != ans.rend(); ++it) {
            cout << (*it).second << ' ' << (*it).first << '\n';
        }

        vector <pair <int, int> >::iterator itt = ans.begin();

        for(; itt != ans.end(); ++itt) {
            cout << (*itt).first << ' ' << (*itt).second << '\n';
        }
    }
    else {
        cout << -1 << '\n';
    }

    return 0;
}

void DF(int node) {
    freq[node] = 1;

    for(unsigned int z = 0; z < G[node].size(); ++z) {
        if(!freq[G[node][z]]) {
            ans.push_back(make_pair(node, G[node][z]));
            DF(G[node][z]);
        }
    }
}