uva12096
2016-01-20 10:54
232 查看
/* ID: Ben biss PROG: ##### LANG: C++ */ #include<stdio.h> #include <iostream> using namespace std; #include<cstring> #include<sstream> #include <fstream> #include<set> #include<cmath> #include<string> #include<cstdlib> #include<algorithm> #include<stack> #include<vector> #include<map> #include<queue> #define FOR(i,n) for(i=0;i<n;i++) #define cmem(a) memset(a,'/0',sizeof(a)) #define imem(a) memset(a,0,sizeof(a)) //#define cin fin //#define cout fout typedef set<int> Set; map<Set,int>my_map; vector<Set>IDCH; stack<int>s; int ID(Set x)//将集合转变成ID { if(my_map.count(x))return my_map[x]; IDCH.push_back(x); return my_map[x]=IDCH.size()-1; } //定义宏,方便使用下面的函数 #define All(x) x.begin() , x.end() #define INS(x) inserter(x,x.begin())//生成新的迭代器 int main() { //ofstream fout ("#####.out"); //ifstream fin ("#####.in"); int cases,flag=0,num; string str; cin>>cases; while(cases--) { if(flag++)printf("***\n"); cin>>num; while(num--) { cin>>str; if(str[0]=='P')s.push(ID(Set()));//创建一个空集合,作为参数传递,http://www.cplusplus.com/reference/set/set/set/ else if(str[0]=='D')s.push(s.top()); else { Set x1=IDCH[s.top()];s.pop(); Set x2=IDCH[s.top()];s.pop(); Set x; if(str[0]=='U')set_union(All(x1),All(x2),INS(x));//这些函数,在我的博客里面有 if(str[0]=='I')set_intersection(All(x1),All(x2),INS(x)); if(str[0]=='A'){x=x2;x.insert(ID(x1));} s.push(ID(x)); } cout<<IDCH[s.top()].size()<<endl; } } return 0; }
相关文章推荐
- opencv从入门到精通(1)-创建自己的视频播放器
- php CLI的使用与扩展安装
- 内存管理
- Specification_&_Datasheet_&_Books
- ko的 dependentObservable 引用自身声明方式
- MapReduce算法设计-Second Sorting
- C++中内存分配详解
- Android 首次创建数据库或者更新时,SQLiteOpenHelper的使用与解析
- AndroidStudio操作笔记--简单介绍1
- 中国行政区县GPS坐标
- DirectShow SDK下载
- greenDAO讲义(二):数据库查询篇
- 线程池系列一:线程池作用及Executors方法讲解
- 2.求最长无重复字符子串和求最长回文子串的算法
- MySQL数据库的优化
- 2014年面试题
- PKI常见证书格式和转换
- plsqldev工具自动提交
- 自学Python十 爬虫实战三(美女福利续)
- iOS之 opencv3.0.framework