noip模拟测试 主仆见证了 Hobo 的离别

南楼画角 提交于 2019-11-27 22:08:57

考试想到了正解然而并没有什么卵用(当然不是dfs)

做法稍有不同我用的是并查集

因为这题比较容易看出来并查集大概可做

考虑并查集特点:只能查询总父亲,判断是否在一个集合内;

那么我们只能离线来做。否则只能判断集合不能判断父子关系

考虑正确性:发现并和交没有关系(就算有关系对于某个点来说我们也只会可能是同级关系不会产生父子关系),这样我们可以分开

用两种并查集一种维护并操作另一种交操作。

我们只在新加入这个点(即它合成时处理和它相关操作即可),对于询问x,y;

我们处理两个里比较大的  :  y大说明它是并出来的(假设它是因为被合并当了父亲的话就不是最大的了),说明我们在并的并查集中去解决它即可;

同理:x大说明它是交出来的,我们放入交中的query去解决,注意的是要翻转一下并查集中的父子关系,使交出来的儿子去当集合中的父亲。。。

K=1,合同交,我们在并和交的离线操作中均去解决保证他们都当了一次另一个节点的父亲。。。

复杂度因为最多把用来融合的元素都扫了一遍,并查集查一次大概是logn的 所以大概是o(2*n+nlogn)的或者与M有关大概是这个样子总之复杂度不会超掉

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!