Cod sursa(job #3196270)

Utilizator mihaistamatescuMihai Stamatescu mihaistamatescu Data 23 ianuarie 2024 13:02:10
Problema Mesaj4 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define DIM 100010
using namespace std;
ifstream fin ("mesaj4.in");
ofstream fout("mesaj4.out");
bool viz[DIM];
int niv[DIM], tata[DIM], node[DIM];
vector<int> L[DIM];
vector<int> F[DIM];
int vf, n, m, x, y, crt;
void dfs(int nod, int nivel){
    viz[nod]=true;
    niv[nod]=nivel;
    vf++;
    for (auto vec:L[nod]){
        if (!viz[vec]){
            F[nod].push_back(vec);
            tata[vec]=nod;
            dfs(vec, nivel+1);
        }
    }
}
bool cmp(int x, int y){
    return niv[x]<niv[y];
}
void dfsAfis(int nod){
    if (tata[nod]!=0){
        fout<<tata[nod]<<" "<<nod<<"\n";
    }
    for (auto fiu:F[nod]){
        dfsAfis(fiu);
    }
}
int main (){
    fin>>n>>m;
    for (int i=1;i<=m;i++){
        fin>>x>>y;
        L[x].push_back(y);
        L[y].push_back(x);
    }
    dfs(1, 0);
    if (vf!=n){
        fout<<-1;
        return 0;
    }
    for (int i=1;i<=n;i++){
        node[i]=i;
    }
    sort(node+1, node+n+1, cmp);
    fout<<(n-1)*2<<"\n";
    for (int i=n;i>1;i--){
        crt=node[i];
        fout<<crt<<" "<<tata[crt]<<"\n";
    }
    dfsAfis(1);
    return 0;
}