UVa12096

来源:互联网 发布:java volatile变量 编辑:程序博客网 时间:2024/06/08 13:46

准确点讲,这道题不是我自己写出来,我先照着书上的代码敲了一遍,然后搞懂了思路:

  • 首先, 这道题最重要的是,应该想到:对每一个集合起一个特定的id,每一个集合应该是一个set<int>,其中的int是为了存储该集合中的每一个集合的id.

  • 然后应该设置一个map,用来将每一个集合更它相对应的id结合起来,即map<set<int>, int>,再就是用一个vector把这些每一个大的包含其他元素的集合的id结合起来。

所以就有三个结构。

还有就是对于设置id的实现,map中是没有重复的,用map的count方法去查找是否有集合,有的话就返回ID,没有的话加入一个新的id。

之后要对五个命令进行分析,dup和push,是两个简单操作,利用stack可以很简单的实现,union和insection和and这三个相对来讲复杂一点,但操作名称也给了一定的提示,可以想到algorithm头文件中的set_union和set_insection操作,这两个是对集合的操作。


原创粉丝点击