题目大意:n(1 ≤ n ≤ 100000)对夫妻形成环,编号为1到2n。相邻的夫妻能够从环中删除,若能删除全部夫妻,则输出Yes,否则输出No。有多组测试样式,当n等于0时,输入结束。
解题思路:逆向思维,在生成环的过程进行处理,而不是在生成环后再删除夫妻。
用到的数据结构:栈。
代码如下:
#include <iostream> #include <stack> #include <map> using namespace std; int main() { int n, nn; while (cin >> n, n != 0) { stack<int> st; map<int, int> m; // 读入夫妻对 int w, h; for (int i = 0; i < n; i++) { cin >> w >> h; m[w] = h; m[h] = w; } nn = n * 2; for (int i = 1; i <= nn; i++) { // 夫妻编号从1开始到n*2 if (!st.empty() && st.top() == m[i]) { st.pop(); } else { st.push(i); } } if (st.empty()) { cout << "Yes" << endl; } else { cout << "No" << endl; } } return 0; }