Pagini recente » Istoria paginii runda/simulare_oji2012_clasa_a_9-a/clasament | Cod sursa (job #2086089) | Cod sursa (job #1904071) | Cod sursa (job #2223512) | Cod sursa (job #2023243)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
FILE *fin, *fout;
vector < int > G[MAXN], h[MAXN];
pair < int, int > answer[MAXN];
int k, m, n, ans, father[MAXN], height[MAXN];
bool seen[MAXN];
void DFS( int node ) {
seen[node] = 1;
for (int son: G[node])
if (!seen[son]) {
height[son] = height[node] + 1;
h[height[son]].push_back(son);
father[son] = node;
answer[ans++] = {node, son};
DFS(son);
}
}
bool check() {
for (int i = 1; i <= n; i++) {
if(!seen[i])
return 0;
seen[i] = 0;
}
return 1;
}
void BFS() {
for (int i = n; i > 1; i--) {
int node;
while(!h[i].empty()) {
node = h[i].back();
h[i].pop_back();
answer[ans++] = {node, father[node]};
}
}
}
int main()
{
fin = fopen( "mesaj4.in", "r" );
fout= fopen( "mesaj4.out","w" );
int x, y;
fscanf( fin, "%d%d", &n, &m );
for (int i = 1; i <= m; i++) {
fscanf( fin, "%d%d", &x, &y );
G[x].push_back(y);
G[y].push_back(x);
}
height[1] = 1;
h[1].push_back(1);
DFS( 1 );
if (check()) {
BFS();
fprintf( fout, "%d\n", ans );
for (int i = 0; i < ans; i++)
fprintf( fout, "%d %d\n", answer[i].first, answer[i].second );
}
else
fprintf( fout, "-1" );
fclose( fin );
fclose( fout );
return 0;
}