码迷,mamicode.com
首页 > 其他好文 > 详细

uva 12096

时间:2015-01-25 22:28:33      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

优先队列,主要是STL应用所以复制一下

技术分享
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <cctype>
#include <set>
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())

using namespace std;

const int maxn = 10005;

typedef set<int>Set;
map <Set,int>IDcache;
vector<Set>Setcache;

int ID(Set x){
    if(IDcache.count(x))
        return IDcache[x];
    Setcache.push_back(x);
    return IDcache[x] = Setcache.size()-1;
}

int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.in","r",stdin);
#endif
  //  freopen("out.out","w",stdout);
    stack<int>s;
    int t;
    cin >> t;
    while(t--){
    int n;
    cin >> n;
    for(int i = 0;i < n;i++){
        string op;
        cin >> op;
        if(op[0] == P)
            s.push(ID(Set()));
        else if(op[0] == D)
            s.push(s.top());
        else{
            Set x1 = Setcache[s.top()];
            s.pop();
            Set x2 = Setcache[s.top()];
            s.pop();
            Set x;
            if(op[0] == U)
                set_union(ALL(x1),ALL(x2),INS(x)); ///并集
            if(op[0] == I)
                set_intersection(ALL(x1),ALL(x2),INS(x)); ///交集
            if(op[0] == A){
                x = x2;
                x.insert(ID(x1));
            }
            s.push(ID(x));
        }
        cout << Setcache[s.top()].size() << endl;
    }
    cout << "***" << endl;
    }
    return 0;
}
啊哈哈哈

 

uva 12096

标签:

原文地址:http://www.cnblogs.com/hanbinggan/p/4248966.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!