并查集
Masker_43
这个作者很懒,什么都没留下…
展开
-
【F - True Liars】
思路:带权并查集(种类)注意**par[i]和FIND(i)**的区别。dp+输出路径注意cur卡了很久最奇怪的就是maxn的大小,605、1005都会WA,1000、1111则AC。代码:63ms 4696kB//63ms 4696kB#include <iostream>#include <algorithm>#include &l...原创 2019-07-02 15:05:00 · 247 阅读 · 0 评论 -
【E - 食物链】
思路:基础种类并查集,注意取余,+3 。读到文件尾会 WA,真是 … 。总结:逻辑判断类题,当同属于同一集合(头元素相同)时进行判断;不属于同一集合时,合并。代码:282ms 1116kB//282ms 1116kB#include <iostream>#include <cstdio>#include <cstring>...原创 2019-06-30 16:56:29 · 480 阅读 · 0 评论 -
【D - How Many Answers Are Wrong】
思路:带权并查集,区间统计。带权并查集和普通并查集的区别:Find 函数不可以写递归了,要能够动态更新路径上所有点的 val 。UNION 函数中要改 val[parr],不需要改val[r]。本题注意:题目没说多组用例,自己也要读到文件尾,不然就会WA。区间统计需要变成左开右闭(如此针对:6,6,1 类限制才不会出错)。代码:46ms 2972kB...原创 2019-06-30 16:16:36 · 95 阅读 · 0 评论 -
【C - How Many Tables】
思路:非常质朴的并查集啦,求有几个联通块,最后头为 -1 的元素个数就是呗。代码:0ms 1416kB//0ms 1416kB#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int maxn = 1005;in...原创 2019-06-30 14:50:34 · 135 阅读 · 0 评论 -
【N - Is It A Tree?】
思路:和//0ms 1200kB#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int maxn = 1e5 + 5;int T = 0;bool ans;int par[maxn];bool app[maxn]...原创 2019-07-05 12:25:49 · 138 阅读 · 0 评论 -
【M - 小希的迷宫】
思路:很容易想到是并查集,若新路的两端已经联通,则成环(不符合要求)。但是有坑:首先小希要求 “任意两个房间都有且仅有一条路”,即全图是强连通的。若树根有两个或两个以上则不符合要求。若直接输入 “0 0”,说明迷宫没有房间,符合要求。注意编号不一定顺序,因此要加入 app[maxn]。代码:46ms 1904kB//46ms 1904kB #include <...原创 2019-07-05 11:52:07 · 260 阅读 · 0 评论 -
【B - The Suspects】
思路:并查集基础题。首先写了BFS,MLE。并查集:令第一个元素为首元,将每组合并,最后查找也比较简单。代码:BFS:MLE#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;const i...原创 2019-06-30 10:49:56 · 85 阅读 · 0 评论 -
【L - Connections in Galaxy War】
思路:“带权并查集”(权不变),离线删除、查询离线:结构体存储。将顺序的删除改为逆序的增添,起始图为全部摧毁后的图,再逆序输出答案。还没有AC代码:WA#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <s...原创 2019-07-05 09:49:59 · 172 阅读 · 0 评论 -
【A - Wireless Network】
暑假啦,做并查集专题~~~~思路:先预处理把距离合格的电脑之间做上标记。每次修理时可能发生合并。每次询问时,查看是否在同一组中。注意:不加头文件可能会莫名报错。scanf 注意加 getchar。代码:3000ms 1680kB//3000ms 1680kB#include <iostream>#include <cstdio>//...原创 2019-06-29 22:09:57 · 87 阅读 · 0 评论 -
【K - Rochambeau】
思路:带权并查集+枚举。关键在题意:若按照一般做法,当出现矛盾时完全无法判断是关系链上的哪一环导致出错,也就无法确定 judge 的身份。枚举每一个人,认为此人是 judge 时,有关他的所有关系都是不可信的,需要跳过。题目不仅要求出谁是 judge,还要求判断多少条关系后能够确认他是 judge,等价于能够判断所有其他人都不是 judge 的语句数量。所以,EDGE 存边、枚举 ...原创 2019-07-04 19:39:08 · 150 阅读 · 0 评论 -
【J - A Bug's Life】
思路:基础种类并查集。注意输出格式 \n\n。代码:766ms 708kB//766ms 708kB#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 2005;int N,M;bool ...原创 2019-07-04 15:40:03 · 100 阅读 · 0 评论 -
【I - Navigation Nightmare】
思路:二维并查集,水平坐标是一维,竖直坐标是另一维,每维都有自己的par & val。注意一条路同时提供水平和竖直两个维度的新关系。假设询问时间从小到大,不然若每次都重新并查集会TLE。代码:157ms 1940kB//157ms 1940kB#include <iostream>#include <cstring>#include...原创 2019-07-04 15:14:35 · 166 阅读 · 0 评论 -
【H - Parity game】
思路:种类并查集+离散化这应该是一种非常简便的离散化方法:因为数字的范围太大(1e9),不得不离散化,即将 5000*2 个 index 通过映射存起来。把每个询问存进结构体,数组和队列皆可;把全部的端点 index 存进 f 数组(par 和 val 的 maxn 都是 1e4 + 5)。对 f :sort 排序,unique 去重,如此,每个端点 index 就有了自己的 “指纹...原创 2019-07-03 11:33:30 · 143 阅读 · 0 评论 -
【G - Supermarket】
思路:贪心(可加并查集优化)贪心:选取方法:先将物品按价值从高到低排序,尽量把出售物品的时间向后放,不要影响前面的物品。拿最高价物品A来说:有没有可能不选择这个最高价值的物品呢?如果不选它,那必定是在它的截止日期可以售出更高价的物品,但是它已经是最高价的啦,所以一定要卖它。有没有可能在之前卖它可以获利更大呢?如果可以,必然是有某个物品B本来不能卖,现在能卖了,可是A和B仍然...原创 2019-07-02 19:30:49 · 207 阅读 · 0 评论 -
并查集
核心:普通并查集:void INIT(){ memset(par , -1 , sizeof(par)); return ;}int FIND(int i){ return par[i] == -1 ? i : par[i] = FIND(par[i]);}void UNION(int l,int r){ par[parr] = parl; return ;}...原创 2019-07-05 21:27:58 · 136 阅读 · 0 评论