数据结构:并查集
文章平均质量分 94
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem 2-SAT、并查集
题意:每个门有且必须被2个开关所控制,一个开关可以控制多个门,给定n个门的初始状态和每个开关控制哪些门,问是否有方案打开一些开关使所有的门都为unlocked状态。2-SAT、并查集把由于每个门被2个开关控制,所以把门看成是边,把开关看成是点,每个开关有2种点,打开i和关闭i+m,从而变成一个经典的 2-SAT 问题。一个门分别被last[r] 和 i控制,则如果门是开的,则2个开关要么都关要么都开,_merge(last[r], i); _merge(last[r] + m, i + m);否原创 2017-03-22 01:26:12 · 1033 阅读 · 0 评论 -
Codeforces Round #385 (Div. 2) C. Hongcow Builds A Nation 并查集+贪心+组合学、图论、dfs
题意:有n个点(其中有k个关键点),m条边,要求添加尽可能多的边使得k个关键点之间没有路径,问最多可以添加多少条边。并查集+贪心+组合学、图论、dfs用并查集处理这个图,相关联的点构成一颗树,然后把每棵树的结点数储存在该树的根节点上,然后开始贪心,找出k个关键点里,关键点所在树的结点个数最多的结点 maxci,然后把这个ci 以及它所关联的点 与 所有没有关键点出现的树相结合(free),形成一个连通块,这个连通块的总边数是 (free + maxcnt) * (free + maxcnt - 1)原创 2017-01-10 23:20:45 · 756 阅读 · 1 评论 -
Codeforces Round #383 (Div. 2) D. Arpa‘s weak amphitheater and Mehrdad‘s valuable Hoses 并查集+双重01背包
题意:一堆人,这些人构成一些集合,2个元素至少有一条路径则为同一个集合,对于这些集合每个交合要么全取要不去不超过一个人,且每个人有一个wi和ai,要求在总wi小于等于w的情况下,是总ai最大并查集+双重01背包先用并查集处理出ptr-1个集合,然后对于这ptr-1个集合要么全取要么去不大于1个,跑一边01背包。dp[i][j]表示到 第i个背包是,总消耗容量j是最多装 dpij的东西。复杂度 O(N^2)原创 2017-01-10 18:50:54 · 712 阅读 · 0 评论 -
Codeforces Round #376 (Div. 2) C. Socks 并查集+贪心、图论
并查集+贪心、图论在读入的时候直接把有边相连的点维护到一个集合里,最后对于处理出的森林,可以用map mp;维护,即mp[i][j]表示以 i 为根的树上颜色 j 出现的次数,然后对于每颗树,找出树上出现的次数最多的结点颜色相同的颜色, ans += (该树的总结点数) - 出现的次数最多的结点颜色相同的颜色的结点个数复杂度 O(n)原创 2016-10-22 12:31:39 · 1155 阅读 · 1 评论 -
UVALive 6910 Cutting Tree 并查集
简单并查集给出一片森林, 然后执行1)切断 x和x的父节点的边, // 查询的时候不进行路径压缩, 然后直接 father[ x] = x2)查询 x, y 是否是相连通的 //分别找x y的根, _find(x) == _find(y)复杂度 O(n)原创 2016-08-03 22:54:07 · 708 阅读 · 1 评论