/*
ID:rayafjy1
PROG:fence
LANG:C++
*/
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <vector>
#include <algorithm>
#define MAX_N 501
#define MAX_M 1024
using namespace std;
vector<int> stack;
int minn, maxx, s, du[MAX_N], map[MAX_N][MAX_N * 2], size[MAX_N];
void input() {
int m, a, b;
scanf("%d", &m);
memset(map, 0, sizeof(map));
memset(size, 0, sizeof(size));
minn = MAX_N;
maxx = 0;
while (m--) {
scanf("%d%d", &a, &b);
map[a][size[a]++] = b;
map[b][size[b]++] = a;
minn = min(minn, a);
minn = min(minn, b);
maxx = max(maxx, a);
maxx = max(maxx, b);
}
for (int i = minn; i <= maxx; i++)sort(map[i], map[i] + size[i]);
}
void find (int &s) {
memset(du, 0, sizeof(du));
int i;
for (i = minn; i <= maxx; i++) du[i] += size[i];
s = 1;
for (i = minn; i <= maxx; i++) if (du[i] % 2) {s = i; break;}
}
bool dfs (int x) {
int i, j;
for (i = 0; i < size[x]; i++) {
int t = map[x][i];
if (t == -1) continue;
map[x][i] = -1;
for (j = 0; j < size[t]; j++)
if (map[t][j] == x) {map[t][j] = -1;break;}
dfs(t);
}
stack.push_back(x);
return 0;
}
void dosolve() {
find(s);
dfs(s);
for (int i = (int)stack.size() - 1; i >= 0; i--) printf("%d\n", stack[i]);
}
int main() {
freopen("fence.in", "r", stdin);
freopen("fence.out", "w", stdout);
input();
dosolve();
return 0;
}
usaco 3.2 Riding The Fences
最新推荐文章于 2022-08-16 12:12:43 发布