摘要:
原题链接 图中每个环都可以缩成一个点,点权为每个点之和,如果这个强连通有一个点有酒吧,那么这个点有酒吧。不要忘了吧起点更新为强连通分量编号 最后spfa跑最长路 代码: 阅读全文
摘要:
思路: 反向建边,初始化终点可以到达的点并标记,枚举没被标记的点,把他们到达的点的标记记为0(注意要开一个新的数组标记,否则可能会用已修改的点继续更新) 最后求终点到起点的最短路 代码: 阅读全文
摘要:
原题:传送门 如果两个物品之间存在优惠关系就连一条边,注意值为0不要连边 然后再加一个节点0,往点1~B连权为A的边 然后求一遍最小生成树即可 代码: 阅读全文
摘要:
链接 一个邮递员要从一号点到每个点再回来,求最短路 题目说一次只能去一个点,这样就简单了,求每个点最短路 怎么求回来的最短路?每个点跑一次dijkstra?这样会T 只要反向建边,再求点1到各点的最短路不就行了吗?(可以画个图手算一遍) 代码: 阅读全文
摘要:
链接 做死我了,,,半夜找题自虐 floyd算法 阅读全文
摘要:
原题 原题 思路 将第一个序列依次从左到右标号,然后映射到第二个序列中 因为第一个序列标号只上升的所以问题就转化为序列2标号后的最长上升子序列 代码 阅读全文
摘要:
背景 我是DP超级大蒟蒻,这种问题上课听一脸懵逼, 于是今天下午拿出来好好补。。。 这里只举最长上升子序列的栗子 O(n^2)做法 在序列a 设dp[i]是以第i个数结束的最长上升子序列的长度 那么对于每一个i,枚举j满足j<i&&a[j]<a[i]的最大dp[j] 那么dp[i]=dp[j]+1; 阅读全文
摘要:
背景 花了一个上午,终于把树状数组弄懂了。。。 打了三种树状数组的模板:树状数组单点更新区间查询,线段树区间更新单点查询,树状数组区间更新区间查询。 第三种太毒了,,,好久才明白 树状数组 就是树一样的数组,它的底层实现其实就是一个数组,但是我们把它yy成了一棵树。。。 他的每一列的最顶端有一个元素 阅读全文
摘要:
背景 这是一道tarjan缩点的模板题 原题 传送门 思路 没什么思路,先跑一遍tarjan,顺便记录每一个强联通分量(新点)的权值,将原图清0,然后遍历每一条边,如果这条边连接两个不同的强联通分量,就连一条边,最后记忆化搜索。 代码 阅读全文
摘要:
背景 今天课上讲了树状数组和线段树,有是一脸懵逼。。。 于是网上有恶补了一下, 看了几个小时blog终于懂了。。。 由于很难解释,就只贴两个模板代码(一个单点修改+单点和区间查询,一个区间修改+单点和区间查询) 几点注意事项 1.首先跑区间更新的程序,一般对于每一个点要维护一个lazy变量来临时存储 阅读全文