uva 12096 115 页

来源:互联网 发布:教育平台软件 编辑:程序博客网 时间:2024/05/17 06:47
#include <iostream>#include <cstdio>#include <set>#include <vector>#include <map>#include <stack> #include <algorithm>using namespace std; #define ALL(x) x.begin(),x.end()#define INS(x) inserter(x,x.begin())typedef set<int> Set;map<Set,int> IDcache;//把集合映射成ID vector<Set> Setcache;//根据ID取集合 //IDcache 存放的是集合对应的数字 int ID(Set x) {    if(IDcache.count(x)) return IDcache[x];    Setcache.push_back(x);    return IDcache[x]=Setcache.size()-1;} int main() {    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;}
原创粉丝点击