Pagini recente » Cod sursa (job #690068) | Cod sursa (job #2077065) | Cod sursa (job #1651883) | Cod sursa (job #593880) | Cod sursa (job #1242761)
#include <fstream>
#include <vector>
using namespace std;
#define MAX 100001
int n, m;
int tata[MAX], gr[MAX];
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
vector <int> lista[MAX];
vector <pair<int, int>> muc;
vector <bool> arb;
void dfs(int nod);
void ciclu(int nod);
int main()
{
int i, u, v, cp=0;
fin>>n>>m;
for(i=0; i<m; i++){
fin>>u>>v;
muc.push_back(make_pair(u, v));
arb.push_back(false);
lista[u].push_back(i);
lista[v].push_back(i);
gr[u]++; gr[v]++;
}
for(i=1; i<=n; i++)
if(gr[i]%2==1){
fout<<"-1\n";
return 0;
}
for(i=1; i<=n; i++)
if(tata[i]==0)
{
cp++;
tata[i] = -1;
dfs(i);
}
if(cp>1) {fout<<"-1\n"; return 0;}
//for(i=0; i<m; i++)
//if(arb[i]) fout<<i+1<<' ';
ciclu(1);
return 0;
}
void ciclu(int nod){
int i, j, k, next;
for(i=1; i<=n; i++){
j=0; k=lista[i].size()-1;
while(j<k){
while(j<lista[i].size() and arb[lista[i][j]]) j++;
while(k>=0 and !arb[lista[i][k]]) k--;
if(j<k){
swap(lista[i][j], lista[i][k]);
j++; k--;
}
}
}
for(i=1; i<=m; i++)
{
fout<<nod<<' ';
do{
j = lista[nod].back();
lista[nod].pop_back();
next = muc[j].first;
if(next==nod) next = muc[j].second;
muc[j].first = muc[j].second = 0; //am fol muc j;
}while(next==0);
nod = next;
}
}
void dfs(int nod){
int i, next;
for(i=0; i<lista[nod].size(); i++){
next = muc[lista[nod][i]].first;
if(nod==next) next = muc[lista[nod][i]].second;
if(tata[next]==0)
{
tata[next]=nod;
arb[lista[nod][i]]=true;
dfs(next);
}
}
}