Cod sursa(job #3250646)

Utilizator NastureNasture Anca Nasture Data 22 octombrie 2024 18:01:48
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include<vector>
#include<utility>
#include<stack>
using namespace std;
vector<pair<int, int>>lista[100001];
bool ok[500001];
stack<int>st;
void euler (int nod)
{
	int fiu;
	while (lista[nod].size())
	{
		st.push(nod);
		fiu=lista[nod].back();
		lista[nod].pop_back();
		vector<int>iterator :: t;
		t=find(lista[fiu].begin(), lista[fiu].end(), nod);
		lista[fiu].erase(t);
		nod=fiu;
	}
}
int main()
{
    ifstream cin("ciclueuler.in");
    ofstream cout("ciclueuler.out");
    int n, m, i, x, y, ok=0;
    cin>>n>>m;
    for (i=1;i<=m;i++)
	{
		cin>>x>>y;
		lista[x].push_back(make_pair(y, i));
		lista[y].push_back(make_pair(x, i));
	}
	for (i=1;i<=n;i++)
	{
		if (lista[i].size()%2==1)
		{
			i=n+1;
			ok=-1;
		}
	}
	if (ok==-1)
	{
		cout<<"-1";
	}
	else
	{
		int nod=1;
		int ok=1;
		while (!st.empty() && ok==1)
		{
			ok=0;
			cout<<nod<<" ";
			euler(nod);
			nod=st.top();
			st.pop();
		}
	}
    return 0;
}