Pagini recente » Cod sursa (job #1430351) | Cod sursa (job #2090625) | Cod sursa (job #928808) | Cod sursa (job #2821170) | Cod sursa (job #723562)
Cod sursa(job #723562)
#include <fstream>
#include <set>
#include <stack>
#include <vector>
using namespace std;
long N[100001] = {0};
long From[500005] = {0};
long To[500005] = {0};
long Taken[500005] = {0};
set<long> *M;
int main(void)
{
fstream fin("ciclueuler.in",ios::in);
fstream fout("ciclueuler.out",ios::out);
long Noduri,Muchii,i,a,b,ok;
M = new set<long>[100001];
fin >> Noduri >> Muchii;
for (i = 0;i < Muchii;i += 1)
{
fin >> a >> b;
From[i] = a;
To[i] = b;
Taken[i] = 0;
M[a].insert(i);
M[b].insert(i);
}
vector<long> V;
stack<long> S;
for (i = 1;i <= Noduri;i += 1)
{
if (N[i] == 1)
{
continue;
}
S.push(i);
N[i] = 1;
while (S.empty() == false)
{
a = S.top();
S.pop();
if (M[a].empty() == false)
{
ok = 0;
while ((M[a].empty() == false) && (ok == 0))
{
i = *M[a].begin();
if (Taken[i] == 0)
{
ok = 1;
}
else
{
M[a].erase(*M[a].begin());
}
}
if (ok == 1)
{
M[To[i]].erase(i);
M[From[i]].erase(i);
if (From[i] == a)
{
S.push(To[i]);
N[To[i]] = 1;
}
else
{
S.push(From[i]);
N[From[i]] = 1;
}
Taken[i] = 1;
}
}
V.push_back(a);
}
V.pop_back();
}
for (i = 0;i < V.size();i += 1)
{
fout << V[i] << " ";
}
fin.close();
fout.close();
return 0;
}