Pagini recente » Borderou de evaluare (job #147029) | Cod sursa (job #141751) | Cod sursa (job #68327) | Cod sursa (job #1711573) | Cod sursa (job #508406)
Cod sursa(job #508406)
#include <cstdio>
#include <vector>
#include <bitset>
#include <set>
using namespace std;
#define DIM 100004
#define pb push_back
#define IT vector<int>::iterator
#define ITT vector<pair<int, int> >::iterator
#define ITS set<pair<int ,int> >::iterator
#define mp make_pair
vector<int>G[DIM];
vector<pair<int, int> >A;
set<pair<int,int> >S[DIM];
bitset<DIM>v(0);
int n,m;
void citire()
{
FILE *f = fopen("mesaj4.in", "r");
fscanf(f, "%d%d", &n, &m);
for (int i = 1, x, y; i <= m; ++i)
fscanf(f, "%d%d", &x, &y), G[x].pb(y), G[y].pb(x);
for (int i = 1; i <= n; ++i)
for (IT it = G[i].begin(); it != G[i].end(); ++it)
S[i].insert(mp(G[*it].size(), *it));
fclose(f);
}
void DFS(int i)
{
int V;
while (!S[i].empty())
{
V = S[i].begin()->second;
S[i].erase(S[i].begin());
A.pb(mp(i, V));
DFS(V);
A.pb(mp(V, i));
}
}
void out()
{
FILE *f = fopen("mesaj4.out", "w");
if ((int)A.size() != 2*(n-1))
fprintf(f, "-1\n");
else
{
fprintf(f, "%d\n", 2*(n-1));
for(ITT it = A.begin(); it != A.end(); ++it)
fprintf(f, "%d %d\n", it->first, it->second);
}
fclose(f);
}
int main()
{
citire();
DFS(1);
out();
return 0;
}