随笔分类 - 洛谷官方题单
摘要:原题链接:https://www.luogu.com.cn/problem/P4017 题意解读:食物链的顶端不会被其他生物吃,在图结构中设定为入度是0,食物链的底端不会吃其他生物,在图结构中设定为出度是0,此题就是要计算所有入度是0的点到所有出度是0的点一共有多条路径。 解题思路: 首先,来模拟样
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1113 题意解读:要计算所有任务完成的最早时间,其实取决于最晚完成的那一个任务,计算每一个任务的完成时间,找最大值即可。 解题思路: 下面介绍两种做法:递推法、拓扑排序法 1、递推法 由于杂务k (k>1) 的准备工作只
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P3916 题意解读:寻找每个点所能到达的最大的点。 解题思路: 直观上,可以依次从每个点开始DFS搜索,记录经过的最大点,复杂度是O(n^2)级别,会超时。 可以换一种角度,既然要找每个点可以达到的最大值,那么可以反向建图
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P5318 题意解读:图的建立、DFS、BFS模版题。 解题思路: 本题主要考察建图、图的DFS、BFS遍历。 建图方式:邻接表vector<int> g[N]; 需要注意的是,在DFS、BFS搜索邻接点时,需要先将邻接点编
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P2814 题意解读:已知多组父子关系,找某个人最早的祖先,并查集的应用。 解题思路: 由于存在真正的父子关系,所以在并查集合并的时候,要把p[x] = y中x设置为子,y设置为父,其余都是并查集的常规操作。 由于是计算姓名
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P3879 题意解读:此题本质上是计算倒排索引,所谓倒排索引,即不是通过文章来找单词,而是通过单词来找文章。 解题思路: 要建立单词和文章之间的关系,一个单词对应多篇文章,且要按照文章编号排序,编号还要去重,可以使用如下数据
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P4305 题意解读:对数据进行去重,借助于set、map都可以解决 解题思路: 由于数据范围比较大,不能直接用数组hash,可以借助于set、map,这里采用map 唯一要注意的问题:本题输入输出数据量很大,需要用scan
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1955 题意解读:要判断约束条件是否可以同时满足,主要是要判断不相等的情况。 解题思路: 对于相等的条件,直接进行集合合并即可; 对于不相等的条件,判断两者是否属于同一个集合,如果形成矛盾,则条件不能成立。 由于i,j的
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1892 题意解读:此题与关押罪犯问题非常像,本质上就是要合并所有的朋友。 解题思路: 首先,初始化并查集; 对于每一对人的关系,如果是朋友,直接进行合并; 如果是敌人,先查看双方之前是否有记录其他敌人,如果有,则将一方与
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1621 题意解读:a~b之间的数,把有大于等于p的公共质因数的数进行合并作为一个集合,求一共有多少个集合。 解题思路: 要进行集合合并、统计集合数,可以使用并查集,有两种做法: 1、暴力法 80%的数据在1000范围内,
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1525 题意解读:有很多罪犯,要关到两座监狱,有一些罪犯之间有仇,并且可以量化出仇恨值,如果关在一起就会冲突,造成的影响就是仇恨值,要使得造成的影响最小,如果可以完全不起冲突,输出0。 解题思路: 首先,要让冲突影响最小
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1918 题意解读:又一个map的应用 解题思路:只需要用一个map<int, int>记录瓶子数和对应的位置即可。 100分代码: #include <bits/stdc++.h> using namespace std
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1102 题意解读:前文https://www.cnblogs.com/jcwy/p/18043197介绍了二分和双指针的做法,本文介绍hash的做法。 解题思路: 定义map<int, int> h,保存每个数+c出现的
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P5266 题意解读:本题考察map的应用。 解题思路:直接使用map即可解题。 100分代码: #include <bits/stdc++.h> using namespace std; map<string, int>
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P5250 题意解读:根据题目要求,需要一种数据结构,支持去重、排序、logN的查找,set是最合适的。 解题思路: 先回顾一下set的关键操作: 设set<int> s; 1、添加:s.insert(x) 2、查询个数:s
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P3405 题意解读:要找到特殊城市的对数,即城市名称前两个字母和另一个城市的州一样,城市的州和另一个城市的前两个字母一样,且州不相同。 解题思路: 定义map<string, int> h; 对于每一个城市,将"州+城市前
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P3370 题意解读:本题要求理解哈希的原理,自行建立哈希表解题,如果直接使用map,就不推荐。 解题思路: 先介绍哈希的原理 1、什么是哈希?什么是哈希表? 先从一个问题出发:给定不超过105个整数(取值1~109),要统
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1536 题意解读:城镇之间现有的道路关系可以将城镇划分的若干集合,每个集合内的城镇是互通的,要计算最少增加多少条道路,使得每个集合都相通。 解题思路: 利用并查集,统计一共出现多少个集合,即p[i] = i的数量, 最少
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1551 题意解读:要判断两人是否是亲戚,只需要看两人是否属于一个集合,基于所有已知的亲戚关系,可以建立多个有亲戚关系的集合,这个过程可以借助并查集。 解题思路: 并查集: 1、定义 并查集是一种树形数据结构,本质上是多棵
阅读全文
摘要:原题链接:https://www.luogu.com.cn/problem/P1185 题意解读:在表格中绘制二叉树,有几个关键点 1、结点用小写字母 o 表示,对于一个父亲结点,用 / 连接左子树,用 \ 连接右子树,表格其余地方填空格。 2、第m 层结点若两个属于同一个父亲,那么它们之间由 3
阅读全文
浙公网安备 33010602011771号