Cod sursa(job #1427774)

Utilizator emanuel_rRamneantu Emanuel emanuel_r Data 3 mai 2015 01:07:30
Problema Mesaj4 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<fstream>
#include<vector>
#include<iostream>

using namespace std;

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

int const NMax = 100005;
vector <int> G[NMax];
int use[NMax];
pair <int, int> sol[NMax];
int n, m, k=1;

void citire()
{
    int i, x, y;
    f>>n>>m;
    for(i=1; i<=m; i++){
        f>>x>>y;
        G[x].push_back(y);
        G[y].push_back(x);
    }
}

void DFSF(int nod, int father)
{
    use[nod] = 1;
    int vecin, i;
    for(i=0; i<G[nod].size(); i++){
        vecin = G[nod][i];
        if(!use[vecin])
            DFSF(vecin, nod);
    }

    if(father){
        sol[k].first = nod;
        sol[k++].second = father;
    }
}

void DFSN(int nod)
{
    use[nod] = 1;
    int vecin, i;
    for(i=0; i<G[nod].size(); i++){
        vecin = G[nod][i];
        if(!use[vecin]){
            g<<nod<<" "<<vecin<<"\n";
            DFSN(vecin);
        }
    }
}

int main()
{
    int ok = 1;
    citire();
    DFSF(1, 0);

    for(int i=1; i<=n; i++)
        if(use[i]==0)
            ok=0;

    if(!ok){
        g<<-1<<"\n";
        return 0;
    }

    g<<2*n - 2<<"\n";

    for(int i=1; i<n; i++){
        g<<sol[i].first<<" "<<sol[i].second<<"\n";
        use[i] = 0;
    }

    use[n] = 0;

    DFSN(1);
    return 0;
}