Pagini recente » Cod sursa (job #180868) | Cod sursa (job #1336066) | Cod sursa (job #524064) | Cod sursa (job #1773053) | Cod sursa (job #495940)
Cod sursa(job #495940)
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std; int c[500003]; int ce[500005]; vector<int> a[100001]; int p = 1, u = 1, nr,k; void ciclu(int x) { bool ok = true; int nr=x; do {for (int i = 0; (size_t) i < a[x].size() && ok; i++) { u++,c[u] = a[x][i]; int z = a[x][i]; vector<int>::iterator j = find(a[z].begin(), a[z].end(), x); a[z].erase(j),a[x].erase(a[x].begin()),x = z; break; } } while (x!=nr); ce[++k]=x; u--; } ifstream in("ciclueuler.in"); ofstream out("ciclueuler.out"); int main() { int N, M; in >> N >> M; for (int i = 1; i <= M; i++) { int x, y; in >> x >> y; a[x].push_back(y),a[y].push_back(x); } for (int i = 1; i <= N; i++) if (a[i].size() % 2 ) { out << -1;return 0;} u=0,c[u]=1,k=0; do if (a[c[u]].size() > 0) ciclu(c[u]); else ce[++k]=c[u],u--; while (u>0); if(k!=M){out << -1; return 0;} for (int i = 1; i <= k; i++) out << ce[i] << ' '; return 0; }