集合
文章平均质量分 92
van之风
这个作者很懒,什么都没留下…
展开
-
P2814 家谱
题目比较简单,一看就想到了并查集,之前做过的并查集都是数字类型的,这次换成了字符串类型,我们就直接使用map,想更快一点就用unordered_map,这样回更快。 代码虽然简单,但是还是有一点细节的~建议自己先实现一遍,下面是AC代码 #include<iostream> #include <unordered_map> #include <map> using namespace std; unordered_map<string,string> t;..原创 2020-05-10 22:26:12 · 195 阅读 · 0 评论 -
P3879 [TJOI2010]阅读理解
STL天下第一~,真的不要太方便了。字典树hash统统不存在,我只要STL 用map最后一个点会T掉,所以我们使用unordered_map 下面是AC代码~ #include <iostream> #include <unordered_map> using namespace std; #define Max 10000 unordered_map<string,int > t[Max]; int main() { int N,..原创 2020-05-09 23:53:58 · 186 阅读 · 0 评论 -
P1955 [NOI2015]程序自动分析
这道题思路很简单~依然用到并查集 首先,我们执行所有相等的约束条件,也就是说将为1的操作提前。我们合并输入的那两个数字xi xj所在的集合,执行完所有为1的操作以后,我们再执行所有为0的操作,如果发现xi,xj在同一个集合,则可以判断这个程序的约束条件不满足,输出NO,如果执行所有为0的操作以后,都不会出现xi,xj在同一个集合。则输出YES 就题目中的样例我们来解释一下~ 我们截取一部分~ 4 1 2 1 2 3 1 3 4 1 1 4 0 有4个约束条件,首先执行前面三个,集合合并以后就是这样。 ...原创 2020-05-09 22:25:38 · 256 阅读 · 0 评论 -
P1892 [BOI2003]团伙
淳朴的并查集,思路也很简单~ 思路:如果是两个人是好盆友,很自然就要将他们所在集合合并了,如果不是朋友比如x—y 是敌人 1.那么就将x与y的所有除x以外的敌人合并,why?因为敌人的敌人就是朋友了(他们有共同的敌人~) 2.除此之外还要将y与x的所有除y以外的敌人合并.why?下面就来解释这个问题~ 比如上面的样例~假如我们不执行上面的第二点 E 1 4 将4与所有1的其他敌人合并,很显...原创 2020-05-07 22:35:45 · 248 阅读 · 0 评论 -
P1621 集合
这道题比较简单,可能是假的绿题~ 题目意思说的很清楚了,我们需要找到有多少个集合,集合内部有大于等于p的公共质因子 思路:我们首先枚举所有p----b之间的质数,然后将所有<=b的这个质数的倍数的祖先和这个质数的祖先合并,也就是并查集的思想,假设p—b之间的某一个为x,因为x的倍数都有公共质因子x,所以按照题目的描述他们属于同一集合。一直从p—b的范围从小到大进行下去,然后最后求有多少...原创 2020-05-07 14:57:04 · 391 阅读 · 0 评论 -
P1525 关押罪犯
这道题看到好多dalao用的并查集,看了一下题解看不太懂,还是我太弱,只能用二分图+二分来做。 二分图就是将图中的点分成两边,也就是分成两个集合,使得。每个集合中的点之间不会有边相连接。如果有边相连一定是不同集合点相连,关于二分图的判定也很简单:就是看有没有奇数的环,换言之,没有边的图一定是二分图。 这就是二分图,看到没,图中两个集合的内部没有边,只有不同集合之间才有边相连接。关于二分图的判...原创 2020-05-06 17:03:58 · 182 阅读 · 0 评论 -
P1918 保龄球
这道题也是很简单的~可手写hash,也可以直接用unordered_map,为什么不用map呢,因为map的效率太低了,map里面是红黑树,会自动排序,和set一样 但是unordered_map就是用hash实现的,非常方便~ 先来说下区别: 排序 map: 在缺省下,按照递增的排序顺序 unordered_map :不排序 执行实施 map :在map内部采用了自平衡的BST(二叉搜索树)...原创 2020-04-29 17:04:21 · 428 阅读 · 0 评论 -
P5266 【深基17.例6】学籍管理
STL天下第一!C++天下第一! 用map不要太爽了~ #include <iostream> #include <map> using namespace std; map<string ,int > t;//存储姓名和分数 typedef map<string ,int >::iterator It; int main() {...原创 2020-04-29 16:34:31 · 402 阅读 · 0 评论 -
P5250 【深基17.例5】木材仓库
set自带的函数常用的有10种: (1)set<int> a 建立一个名字为a、类型为int的集合。 (2)a.insert(b) 在集合中插入一个数b,如果这个数已经存在就什么也不干 (3)a.erase(b) 在集合中删除一个数b,如果这个数不存在就什么也不干 (4)a.erase(l) 在集合中删除地址为l的数 (5)a.end() 返回集合中最后一个数的下一个数的地址 (6)a.find(b) 查询b在集合中的地址,如果这个数不存在就返回a.end() (7)a.lower_bound原创 2020-04-29 12:47:10 · 415 阅读 · 0 评论 -
P3405 [USACO16DEC]Cities and States S
这道题目比较简单~感觉是假的蓝题,用字符串hash将每个省和市计算出对应的数值,并将其标记,这里我们用map, 我们只需要关心城市前面两个字符,后面的都可以舍弃 但是题目中说了,两个配对的城市一定是要来自不同的省份,所以,城市前两个字符和省相同的话,我们不用考虑输入的这个城市和其他城市是是否有配对的~ 就比如: 3 Migk Mi Mirk Mi Mirk Mi 如果不搞个特判就是3了,...原创 2020-04-29 10:52:33 · 540 阅读 · 0 评论 -
P3370 【模板】字符串哈希
这是道很好的字符串hash入门题,题目中明确说过了~用STL就没意思了。 由于数据量比较大,所以我们算出字符串对应的10进制数以后再对mod取余,可以证明。当进制数为107级别,Mod为109级别,产生冲突可能性会很小~ 下面是AC代码~ #include<iostream> #include <vector> #include <algorithm> us...原创 2020-04-29 08:58:41 · 271 阅读 · 0 评论 -
P1536 村村通
依然是并查集的思路,我们只需要求出有几个集合就行了,最后用集合数减去1,比如3个点只需要两条线段链接~ 下面是是AC代码~ #include <iostream> #include <cstring> #define Max 1005 int a[Max]; bool flag[Max]; using namespace std; int find(int x1); /...原创 2020-04-28 11:47:00 · 201 阅读 · 0 评论 -
P1551 亲戚
很好一道并查集入门题~ #include<iostream> using namespace std; #define Max 10000 int a[Max]; int find(int x1); void unions(int x1,int x2); int main() { int n,m,p; cin>>n>...原创 2020-04-28 11:04:21 · 213 阅读 · 0 评论