记录编号 192720 评测结果 AAAAAAAA
题目名称 骑马修栅栏 最终得分 100
用户昵称 Gravatar啊吧啦吧啦吧 是否通过 通过
代码语言 C++ 运行时间 0.005 s
提交时间 2015-10-12 18:47:17 内存使用 0.34 MiB
显示代码纯文本
/*这个题不用判连通,真正的欧拉路径和欧拉回路要先用DFS或ufs判定它是否连通。
其他的,还是那句话根据情况改,直接搞模板Wa得很High*/ 
#include <iostream>
#include <vector>
#include <set>
#include <stack>
#include <algorithm>
#include <fstream>

using namespace std;

ifstream fin("fenceus.in");
ofstream fout("fenceus.out");
stack<int> st;
const int N(501), MAXF(1025);
pair<int, int> to[MAXF * 2];
int f, ind[N] = {0}, s = 0;
vector<pair<int, int> > g[N];
bool vis[MAXF * 2] = {false};
void euler(int);
set<int> po;

main()
{
#define cin fin
#define cout fout
	cin >> f;
	int x, y;
	for (int i = 1; i <= f; ++i){
		cin >> x >> y;
		to[i * 2 - 2] = make_pair(y, i * 2 - 2);
		to[i * 2 - 1] = make_pair(x, i * 2 - 1);
		g[x].push_back(to[i * 2 - 2]);
		g[y].push_back(to[i * 2 - 1]);
		++ind[y];
		++ind[x];
		po.insert(x);
		po.insert(y);
	}
	fin.close();
	
	for (set<int>::iterator it = po.begin(); it != po.end(); ++it){
		if (! s && ind[*it] & 1)
			s = *it;
		sort(g[*it].begin(), g[*it].end());
	}
	if (! s)
		s = 1;
	euler(s);
	
	cout << s << endl;
	while (! st.empty()){
		cout << st.top() << endl;
		st.pop();
	}
	fout.close();
//	for (; ; );
}

void euler(int x)
{
	for(vector<pair<int,int> >::iterator it=g[x].begin();it!=g[x].end();++it)
		if (! vis[it->second]){
			vis[it->second] = vis[(it->second)^1] = 1;
			euler(it->first);
			st.push(it->first);
		}
}