一、并查集个别例题:
1、村村通
怎么判断各个集合是否独立?
可以从1-n遍历,找父节点为自身的个数,即代表元素的个数,即独立集合的个数。
注意洛谷里,想测试多组样例,要求城镇个数不为0,所以就有循环条件啦!
2、修复公路:巧妙在边和修复公路,边统计连通块的个数,当只剩一块的时候输出此时的时间。
3、最短网络:将边排了序,那么再判断是否能插入,当插入的边的个数为n-1的时候,就是最小生成树[贪心]
4、Parity Game
由于数列中只有 0 或 1,那么使先开一个 s 数组表示前缀和,那么:
s[j]-s[i-1]是奇数时,则 [i,j] 区间中的 1 的个数为奇数,反之,为偶数。
区间的关系是已知的,而 s 是未知的,那么就可以用区间的条件来限定前缀和,如果出现奇偶性的矛盾,就可以直接输出。
5.排水系统:高精度,拓扑排序(不大熟练),图论,分子分母互质
6、刻录光盘:普通的并查集是双向的,但本题是单向,用Floyd转移关系
7、汽车拉力比赛、
对于能否滑行,这里用的是并查集的判定。若两点间高度不大于mid(当前二分的D),则将它们的祖先合并,最后判断一下所有要求连接的点之间是否联通就行啦!
二、新发现:
1、你的程序有一个for循环进行n次,那它运算次数的数量级为10^6,又如你的程序有两层嵌套的for循环,每层都循环n次,那它运算次数至少为n*n即10^12。一般的计算机来说1秒内的运算次数为10^7到10^8左右,那么显然循环n次的算法可以在1秒内跑完,而循环n*n的算法不可能在1秒内跑完。
————————————————
原文链接:https://blog.csdn.net/x283930450/article/details/8977370
2.qsort 的用法
http://t.csdn.cn/gEeFdhttp://t.csdn.cn/gEeFd
3.sort排序超时,最好是换种思路,数据量一旦很大的时候,排序就显得慢了http://t.csdn.cn/0EJlnhttp://t.csdn.cn/0EJln
4、unique:将数组去重,并返回去重后最后一个元素的地址。
5、lower_bound:对一个有序的序列,二分查找第一个大于等于当前值的元素的地址。
6.vector数组倒序的两种方式,v.reverse()和普通数组间倒序(引入另外一个数组)。
三、本周新学的知识点:
1.Kruskal算法是通过并查集,按照边的权重顺序(从小到大)将边加入生成树中,但是若加入该边会与生成树形成环则不加入该边,选其次。直到树中含有n - 1条边为止。多用于稀疏图。时间复杂度:O(E log E)(E为边数)
2.Prim算法是通过每次添加一个新节点加入集合,直到所有点加入停止的 最小生成树的算法。多用于稠密图。时间复杂度:O(n²)
3.
种类并查集
扩展域,顾名思义,就是将原来并查集扩大,已达到储存每个元素的多个关系。
4.二分查找的用法,本周打的790(div.4)中E题,最后搜索数值范围的时候,用此算法能不超时。
5、
离散化
当数据范围特别大时且真正用到的数有比较少的时候,就可以用当前元素排序后在数组中的编号来代替原来的元素。
6.带权并查集,就是加一个val[]数组来记录权值,用递归的find()函数来实现
7.贪心算法,局部最优解,动态规划。感觉还蕴含着人生哲理(反而不要用所谓的宏观妄想太多,做好当下,局部的最优解,最终的结果也不会差)
8.有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。——百度百科
9.图的存储,数据不太大的时候可以用邻接矩阵(二维数组),无向图的时候是个对称矩阵;
数据大的时候用邻接表
10、Floyd算法http://t.csdn.cn/Rz7Pbhttp://t.csdn.cn/Rz7Pb四、ACM课程带给我了哪些
1.方法收获:输出带动输入。这是之前在某篇文章里看到的概念。当新拿到某个知识点的时候,怎么入手去学呢?先看他是怎么应用的,用在那些地方,而后再有针对性的学理论基础。勤复习很重要,但是我没有做好这一点,有些课件上没听懂的题就心大的放过去了,不可以哦。在时间利用上,最近几天开始恢复高三的生活模式,按分钟计时。
(摆脱了过度感性的头脑,恢复理智,减少羁绊)
2.做人:从小开始吧,我可能品德修养就不大高。但是在这节课中,我有看到大家积极向上的奋进,踏踏实实的做好每一天的自己,很幸运有互相帮扶的队友和师傅。可能我有些时候会给自己找麻烦,把简单的事情变得复杂,有时候还傻不啦叽的不带脑子,我也开始变得与自己和解,限制都是从自己的内心开始的,所以不要给自己设限。
3.思想上:在一次次的矛盾中认识自己,渐渐发现为什么高考完后我来的是山农。学习习惯会很影响一个人,态度决定高度也不无道理。做事要做踏实,预先留出足够的时间,认真完成。要做自己喜欢的事,要有不撞南墙不死心的倔强,万一他就实现了呢。思想引领是关键,对待某件事的总体思想上就是消极应付的态度的话,那一定结果也是敷衍自己。内心学会平静,学会理清逻辑,混乱的时候写一写,让自己慢下来专心的做好一件事(因为我之前是急脾气,所以这一点对我影响蛮大的)。要有效沟通,一定不能什么事情都憋在自己心里,果断裁决,是需要有定论的。少一些所谓的宏观,做好当下,总会有收获。凡是要认真对待。其实刚开始报这门课的时候,我内心怎么想的呢?我很犹豫,因为听说很容易挂科,害怕绩点不高了,但是我问自己,如果不报这门课的话,我会怎么样?内心的声音告诉我说,会后悔。所以管那么多干嘛。我最佩服我自己的一点就是,从来不缺乏克服困难的勇气,确实是迷之自信,但就是不愿意四年一直顺风顺水,我会渴望有挑战和矛盾,毕竟矛盾是事物发展的源泉和动力。最大的对手是我自己,其他的任何事情或者人都是我生命中的过客,从这些经历中吸取教训,我相信会变成更好的自己。正如”迎风“二字,就是迎难而上,向阳而生。