1 条题解
-
0
骑马修栅栏(Riding the Fences) 题解
思路分析
按题目要求使用对应数据结构与算法模拟/递推求解,注意数据范围边界与时间复杂度。
参考代码
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int m; if (!(cin >> m)) return 0; const int MAXV = 500; vector<vector<int>> cnt(MAXV + 1, vector<int>(MAXV + 1, 0)); vector<int> deg(MAXV + 1, 0); for (int i = 0; i < m; ++i) { int u, v; cin >> u >> v; cnt[u][v]++; cnt[v][u]++; deg[u]++; deg[v]++; } int start = 1; for (int i = 1; i <= MAXV; ++i) { if (deg[i] > 0) { start = i; break; } } for (int i = 1; i <= MAXV; ++i) { if (deg[i] % 2 == 1) { start = i; break; } } vector<int> stk, ans; vector<int> cur_v(MAXV + 1, 1); stk.push_back(start); while (!stk.empty()) { int u = stk.back(); while (cur_v[u] <= MAXV && cnt[u][cur_v[u]] == 0) { cur_v[u]++; } if (cur_v[u] <= MAXV) { int v = cur_v[u]; cnt[u][v]--; cnt[v][u]--; stk.push_back(v); } else { ans.push_back(u); stk.pop_back(); } } reverse(ans.begin(), ans.end()); for (int x : ans) { cout << x << "\n"; } return 0; }
- 1
信息
- ID
- 8767
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者