
并查集
会飞的小蛇
这个作者很懒,什么都没留下…
展开
-
(带权并查集)洛谷P1525关押罪犯
洛谷P1525关押罪犯 思路: 犯人之间的关系我们可以用一个数来表示,0表示在一个监狱里,1表示不在一个监狱里。为了使最大值尽可能小,我们先从大到小排序。然后并查集,依次判断两个人的父节点是否相同(存在关系),如果不存在就合并;存在就判断两个人是否在同一个监狱,在就输出两个人的矛盾值。 代码: #include<bits/stdc++.h> #define pii pair<in...原创 2020-01-23 20:06:17 · 338 阅读 · 0 评论 -
(并查集)洛谷P1197 [JSOI2008]星球大战
P1197 [JSOI2008]星球大战 思路: 摧毁是这个题目的一个难点,如果是摧毁一个点就重新构图的话肯定会T。那么我们可以反着想,就是从最后的状态往前推,用并查集判断是否是连通块。 代码: #include<bits/stdc++.h> #define pii pair<int,int> #define ll long long const int N=1e6+10;...原创 2020-01-20 20:04:42 · 256 阅读 · 0 评论 -
(贪心+并查集)POJ1456 Supermarket
POJ1456 Supermarket 题意&思路: 给你n个商品的价值(pi)和保质期(必须在第di天之前卖掉)。一天只能卖一个商品,问可以获得的最大利润。 首先是贪心,价值越大的物品越要尽可能的卖出去。就是按找商品的价值排序。 然后售卖的时间可以用并查集来维护(大佬真的tql,并查集还可以这么用)。先开始给fa数组赋值-1,当fa[i]==-1的时候表示这一天还没有买过。fa[t]==...原创 2020-01-18 15:26:49 · 187 阅读 · 0 评论 -
(带权并查集+dp)POJ1417 True Liars
POJ1417 True Liars 题意&思路: 一个写了三天的题。 一个岛上存在p1个好人和p2个坏人。Akira可以询问n个问题,每个问题由两个编号x,y和一个字符串a(yes或者no)组成。好人会说实话,坏人会说假话。每次询问表示x如果想让你认为y是好人就会回答yes。问是否能够得到好人的编号。 加权并查集+dp。 加权并查集并不难想,我们不难发现回答yes的是同类,no的是异类。...原创 2020-01-17 23:29:43 · 212 阅读 · 0 评论 -
(带权并查集)POJ1182 食物链
POJ1182 食物链 思路: 因为题目给的相对关系,所以可以用带权并查集做。 权值:0表示x和y是同类,1表示x吃y,2表示x被y吃。 那么在路径压缩的时候,我们得到w[a->c]=(w[a->b]+w[b->c])%3。在区间合并的时候w[t1]=(-w[x]+w[y]+w-1)%3。在判断关系的时候比较w-1和(w[x]-w[y]+3)%3,+3是为了避免负数,w-1是因为...原创 2020-01-16 22:50:05 · 154 阅读 · 0 评论 -
(带权并查集)hihoCoder1515分数调查
hihoCoder1515分数调查 思路: 模板题。权值为子节点比父节点多的分数。 代码: #include<bits/stdc++.h> #define pii pair<int,int> #define ll long long const int N=1e5+10; const int mod=1e7+9; const int maxn=0x3f3f3f3f; con...原创 2020-01-16 20:51:59 · 219 阅读 · 0 评论 -
(带权并查集)HDU3038How Many Answers Are Wrong
HDU3038How Many Answers Are Wrong 题意&思路: 给一个区间长度n,和子区间个数m。区间[l,r]的和为v。如果一个子区间和与前面的子区间和冲突,及为错误,问错误的总数。 我以前竟然学过带权并查集?第一道带权并查集的题,看着题解写的。好复杂的东西。 带权并查集就是结点间有边权值的并查集。 每个结点记录的是与根节点的权值,在路径压缩的之前,sum记录的是与其父...原创 2020-01-16 20:36:59 · 188 阅读 · 0 评论