ACM总结

本文讲述了作者在学习并查集和拓扑排序后,通过解决相关题目遇到的挑战和经验。作者强调了理解并查集在连通问题中的应用,如修复公路和口袋的天空等题目的解题思路,以及如何通过排序优化解决问题。同时,提到了在搭配购买问题中使用并查集的不同策略,并表示将继续研究更多相关题目以深化理解。
摘要由CSDN通过智能技术生成

第十二次

搜索专题已经过去,上一周开始了并查集和拓扑排序,这一部分内容确实比搜索的代码简单,并查集的代码结构简单(可能是你因为还没有接触到并查集里面难得内容,这只是现在得感觉)。

从上一周开始学并查集和拓扑排序,它们得基础知识挺好懂的,但是会有一些题目很难想到用并查集,或者运用后不太好理解代码。

这个周,老师也发给我们了一个文档,里面是五十多到关于并查集和拓扑排序的题目。这个和搜索专题的要求一样,先看题目或者博客,写一下题目大意,和上次不一样的就是这一次必须每一道题目都写上题解,并且保证提交的代码能AC。

因为知识差不多讲完了,所以我这个也就开始看这个文档里面的题目了。和上次一样,我想的是把全部的题目都看个遍,再写题目,但是这次看的时候,我会尽量将题意和题解写上去。但是通过写前面的几道题目。我发现我写的题解都是太笼统了。有许多小的细节什么的都没有注意到,或者就是思路有点问题。所以题解的话,还是最好写完题目后在补充一下题解。

所以这一周我看的主要内容就是那个文档里面的题目。然后也写了前面几个题目(感觉思路都一样)。吸取上次搜索的专题的教训,我这一次看题目的时间尽量压缩,把更多的时间花在写题目或者看题解上面,就上次的搜索题目,我看完所有的题目都花了好多时间,最后导致我后面的题目都没有来得及写。

找父结点,最基本的代码。

int find(int x){
    if(x!=fa[x])
        x=find(fa[x]);
        //fa[x]=find(fa[x]);
    return fa[x];
}

下面写一下我这个周学到的内容吧:

1、连通问题。这样的题目一般都是给出某俩个点之间是连通的,然后可能让你找到什么时候可以实现全部连通,或者就是在俩点之间的连通路上有权值,通过增加路,或者经过路,就会牵扯到有关权值的问题,可以找到增加路的最小代价,或者经过路找到最大或最小代价

下面讲一下这样的例题吧:

1)、

修复公路 - 洛谷

这个题目,就是给出公路修复的时间,问什么时候可以实现全部通车。因为这个题目牵扯到了时间长短。所以需要先讲全部数据输入(可以建立结构体储存),在对时间进行排序,从短到长(也就是按照修复好的先后顺序排序),这个应该就是老师讲的离线的问题,不需要每输入一组数据就进行判断,进行分析。而是将全部的数据的输入完,进行一定的处理,在运用到代码中。

struct bian{
    int x,y,t;
}e[101010];

这个就是储存边的结构体。(我当时写下面一道题目时,发现写由俩个连接点构成的结构体的用处不大(是在那一道题目中用处不大),所以,我现在才发现这个结构体的主要作用还是用来排序的)。。这个题目除了俩个点,还有一个时间呀,,所以所以主要还是因为这个时间呀。。

然后再依次增加边的过程中,每增加一个边,判断一下是否可以实现全部通车,如果可以,那么新增的边的时间就是最长时间。

2)、

口袋的天空 - 洛谷

这个题目就是连成k个棉花糖。用云朵连成,当然连接俩个云朵需要一定的代价,找到连接的代价最小之和。当然这个题有一点小小的技巧就是有一个棉花糖很大,由很多云朵构成。其他的棉花糖都是只有一朵云朵构成。

这个题目和上个题目的解题思路一样,将全部数据输入,然后进行排序,按照代价进行排序。直到可以找到有n-k-1个云朵连接在一起,其价值之和就是最小的价值之和了。

3)、类似的题目还有这个

营救 - 洛谷

这个题目有一个奇葩的特点,就是宁愿绕很远的路,也要找到通过的路中最大拥挤度最小的一条路。也是排序,然后依次增加一条路,判断此时是否全部连通。

2、强制购买

搭配购买 - 洛谷

这个题目和前几个的思路和解题方法不一样。这个我想的是把全部连通在一起的云朵看成一个,在和其他的单个的云朵类似,可以一堆一堆一起购买。但是我现在还没有调出AC代码(我也不知道哪个地方错了)。

还有好多关于并查集和拓扑排序的类型的题目,我只是看了一下题目,写了一下题意,现在还没有办法讲出具体的都有什么类型。下次博客再说吧。。

还有好多题目要写,任重而道远。。加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值