Pagini recente » Cod sursa (job #2940432) | Cod sursa (job #2855828) | Cod sursa (job #1048634) | Cod sursa (job #2736791) | Cod sursa (job #1133000)
#include <iostream>
#include <queue>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>
#include <string>
#include <list>
#include <set>
using namespace std;
#define N 100100
#define M 500500
int n, m;
struct node {
multiset<int> con;
};
node nodes[N];
list<int> res;
typedef list<int>::iterator iter;
void add(int a, iter it) {
int i = a;
it++;
do {
int ni = *nodes[i].con.begin();
nodes[ni].con.erase(nodes[ni].con.lower_bound(i)); // find(nodes[ni].con.begin(), nodes[ni].con.end(), i));
nodes[i].con.erase(nodes[i].con.begin());
//cout << i<<"->"<<ni << endl;
res.insert(it, ni);
i = ni;
} while (i != a);
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
nodes[a].con.insert(b);
nodes[b].con.insert(a);
}
add(1, res.begin());
iter start = res.begin();
while (res.size() < m) {
// Find new start
while (nodes[*start].con.size() <= 0) {
start++;
if (start == res.end())
start = res.begin();
}
//cout<<"UUSI\n";
add(*start, start);
}
for (iter it = res.begin(); it != res.end(); ++it) {
cout << *it << " ";
}
}