记录编号 |
192720 |
评测结果 |
AAAAAAAA |
题目名称 |
骑马修栅栏 |
最终得分 |
100 |
用户昵称 |
啊吧啦吧啦吧 |
是否通过 |
通过 |
代码语言 |
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);
}
}