Sicily.1021 Couples

来源:互联网 发布:java velocity 编辑:程序博客网 时间:2024/06/05 21:06

栈的简单应用。

为什么用栈:从环的任意一点断开(形成栈),消去结果和环是一样的。

注意:1、用mark将一对夫妻关联起来,用一维数组即可,比二维节省了许多空间。2、mark的长度是200001而不是100001因为n是夫妻对数。 3、每次循环并不需要将mark清零,因为数据会覆盖。

代码如下:


#include <iostream>#include <stack> using namespace std;int main(){    int n;    int mark[200001];    while(cin >> n)    {        if (n == 0) break;        stack<int> store;                int k,t;        for (int i = 0;i < n;i ++)        {            cin >> k >> t;            mark[k] = t;            mark[t] = k;        }        for (int i = 1;i <= 2 * n;i ++)        {            if (store.empty())                store.push(i);            else            {                if(store.top() == mark[i])                    store.pop();                else                    store.push(i);            }        }        if (!store.empty()) cout << "No" << endl;        else    cout << "Yes" << endl;    }}





原创粉丝点击