摘要: 题意:有n只虫子,每次给出一对互为异性的虫子的编号,输出是否存在冲突。思路:用并查集,每次输入一对虫子后就先判定一下。如果两者父亲相同,则说明关系已确定,再看性别是否相同,如果相同则有冲突。否则就将两只虫子并入一个集合。而性别则是用一个gender数组来维护,每个虫子的gender的值为0或者1。0表示该虫子的性别与父亲结点的性别相同。1表示该虫子的性别与父亲结点的性别不同。这题和poj1703本质上是一样的。1703的题解请点传送门。另外还有一个疑惑,本题输入量巨大,我用输入加速后反而比用scanf要慢得多,弄不明白为什么。。有知道的大神欢迎来给解答一下。 1 #include 2 #def 阅读全文
posted @ 2013-08-03 18:46 fenshen371 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 题意:城市中有两个帮派,输入中有情报和询问。情报会告知哪两个人是对立帮派中的人。询问会问具体某两个人的关系。思路:并查集的应用。首先,将每一个情报中的两人加入并查集,在询问时先判断一下两人是否在一个集合中,如果是,则表明两个人的关系已知。本题还需要判断出两人是不是在同一帮派,这里用一个relation数组来维护每个人与根结点的关系。0表示该人与根节点为同一个帮派。1表示该人与根节点为对立帮派。并查集有两个基本操作:find——查找根节点, merge——合并两个集合。在合并两个集合时,其中一个集合的relation的值要发生变化。在这里只需要改变集合根节点的relation(改变的规则见代码中 阅读全文
posted @ 2013-08-03 11:18 fenshen371 阅读(203) 评论(0) 推荐(0) 编辑