Mai intai trebuie sa te autentifici.
Cod sursa(job #3005150)
Utilizator | Data | 16 martie 2023 19:47:25 | |
---|---|---|---|
Problema | Ciclu Eulerian | Scor | 80 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.17 kb |
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
const int NMAX = 1e5;
const int MMAX = 5e5;
int n, m;
pair<int, int> muchii[MMAX + 5];
vector<vector<int>> edges;
vector<int> sol;
int viz[MMAX + 5];
void euler()
{
stack<int> st;
st.push(1);
while (!st.empty())
{
int node = st.top();
if (!edges[node].empty())
{
int x = edges[node].back();
edges[node].pop_back();
if (!viz[x])
{
st.push({(muchii[x].first == node) ? muchii[x].second : muchii[x].first});
viz[x] = 1;
}
}
else
{
st.pop();
sol.push_back(node);
}
}
}
int main()
{
cin >> n >> m;
edges.resize(n + 1);
for (int i = 1; i <= m; i++)
{
int a, b;
cin >> a >> b;
edges[a].push_back(i);
edges[b].push_back(i);
muchii[i] = {a, b};
}
euler();
for (int i = 0; i < sol.size() - 1; i++)
cout << sol[i] << ' ';
return 0;
}