首页 > 代码库 > uva 12096

uva 12096

优先队列,主要是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