- 博客(49)
- 收藏
- 关注
原创 树的直径 (dp或贪心)
遍历到这个点最远能够到达的点,这个点一定是直径上的点,如果不是直径上的点,那么一定存在一个点比这个点更优。个结点的树,树没有边权。请求出树的直径是多少,即树上的最长路径长度是多少。的时候,每次都会保存一个最大的节点,因此更新。到叶子节点,再由下向上更新即可。节点能够到达的 两个最远节点。中保存最大的与要更新的路径求。的子树,能到达的最远距离,接下来只需要考虑对每个。从任意一个节点出发,
2025-04-09 20:16:33
883
原创 floyd模板
是阶段,置于外循环,每次都尝试用。条边组成的无向图,求出所有点对。算法来说时间复杂度为。表示经过若干个不超过。考虑转移可由 状态为。
2025-04-09 18:55:52
1058
原创 spfa模板
能到达的节点,进行更新,若更新的节点不在队列中,则将。则是通过队列将检查所有边的过程进行了优化。条有向边的带非负权图,请计算从。出发,到每个节点的最短路径。起初队列只有起点,取出对头。
2025-04-09 13:33:20
818
原创 Heap_dijkstra模板
更新所有能够到达的节点,直到所有点被标记。条有向边的带非负权图,请计算从。出发,到每个节点的最短路径。找到一个未被标记的,
2025-04-08 19:49:05
634
原创 G-升!龙!_牛客周赛 Round 88
如果考虑操作,那么就应该考虑其中有部分连续区间要被带走,那么应该处理出叶子节点。断开时,$ L[x]$ 记录的即为断开区间的左端点,节点上,每次操作计算处树的价值,操作后将树恢复原样。数组中,并记录它是第几个被遍历到的叶子节点,存入。如果不是叶节点,那么这个值不优,所以和。处理完新最大路径,那么这道题就结束了。的父节点为叶节点,那么需要考虑。的叶节点的最大值 可以考虑树上。树的价值为 路径美丽值的最大值。节点的树,每个节点的权值为。考虑这个新最大路径应该是。断掉这个区间之后,如果。,树上前缀和,树的链剖。
2025-04-07 18:58:00
930
原创 最短路径问题
n 只有100,可以跑一边 n^2 的朴素dijkstra,边的大小表示为两点之间的距离。点有一条边连接,现在任务是找出从一点到另一点之间的最短路径。条边表示第 $u_i $和。
2025-04-03 12:30:08
346
原创 RainbowDash 的 Robot
一个机器人正在这个网格内移动,你可以向他发送指令,使得其向 上下左右 移动,但是这个机器人是由缺陷的,每条指令会执行。,需要满足之间没有受阻的网格,所以贪心的想,优先走到该列最下面,再往左右走,考虑从第。之间最大的受阻网格为多少即可,数据范围较大,维护区间最值可选用线段树。个单元格,如果机器人试图移动到受阻的单元格或网格外,就会爆炸。优先考虑机器人从起点坐标走到终点坐标需要满足的条件,若机器人执行任意次命令,能否从起点单元到达终点单元。单元格被阻断,无法通行,即。次,因此,机器人每次移动。
2025-04-02 15:51:44
1011
原创 RainbowDash 的旅行
天的旅行,对于每一天,你都需要从当前木屋走到小岛游玩,再走到任何一间木屋(包括出发时所在的木屋),你不想浪费时间在赶路上,于是一天通过的两座桥必须有一座是。第一天在1号木屋,所以第一天应由。湖中心有一座岛,湖的外围有。间木屋(围绕小岛) ,第。天,有多少不同的路线组合?间木屋总方案数,可以考虑。桥有车可以快速通过,桥需要步行,速度稍慢。
2025-04-02 15:23:39
1022
原创 特殊图判断
有没有一种算法能快速判断该无向图中的每个连通部分是否满足:连通部分的顶点和边的数量相同。考虑并查集,维护祖先节点中 顶点个数 和 边的个数。如果该图中每个连通部分都满足条件,则输出。给定一个无向图,图中有。
2025-04-02 13:41:36
641
原创 简单路径计数
出发的简单路径(无重复顶点的路径)的数目,打印。,可以考虑搜索所有可行路径并进行剪枝。给一个简单无向图,图中有。每个顶点的度数最多为。
2025-04-02 12:30:06
422
原创 LilaS 的颜色树
树的结构保证了每个点只有一个父节点,那么可以考虑维护一个父节点路径的map,让子节点更新下去,每遍历到一个点,可以直接在父节点的map中查询路径中有没有出现相同颜色的节点。按照以上规则,有多少个好顶点。定义好顶点的规则:从顶点。的最短路径中,除了顶点。(颜色用正整数表示)。本身外,不包含与顶点。颜色相同的顶点,顶点。
2025-04-01 19:39:05
844
原创 牛客周赛 Round 65
读题发现每次都会拿当前最大的那个数,没换之前每组小红拿的数均为大的,若将小紫最小的和小红最大的比较,那么每组小紫的数就均为最大的了,因此,除了该数组中元素均相同,其余均为小紫win。hard版是气温最大值和最小值改变,未知天气气温值改变,其余思路同easy。读题发现有天数气温未知,所以可通过构造未知气温达到最优的寒潮天数。通过数据可得知,可以对每个病人暴力枚举所有药物,选出最优。顺序构造,可不考虑前面未知天数(因为前面未知天数会补上)若选,则先将病人情况用该种药物恢复,再递归到下一种药物。
2024-10-28 20:11:26
468
原创 Codeforces Round 981 (Div. 3)
赛时读完题就去写了一个循环去模拟两者操作并记录次数,游戏结束时奇数次操作为先手win,偶数次操作为后手win,后来发现每次操作只会向目标方向移动一格,所以如果到n格,n为奇数时,为先手者到n格,后手win,反之先手win。不论从左枚举还是从右枚举,在 3 3 3 这组数中,明显应该交换中间的3,一次就可以解决,但是如果顺序枚举左右,就会导致左边或者右边的3先进行交换。1 0 -1 ,肯定是选择0单独作为一段为最优,如果选择了1 0 -1,将可能会少计算一段,所以完美线段长度越短越好。
2024-10-28 13:48:16
490
原创 牛客周赛 Round 64 A-F
首先dfs遍历树,将树种路径上所有点标记,再从路径起点开始dfs_1 一遍,因为是在树上,所以边权为1,不用考虑权重,01dfs,如果是路径上的点dist=0,否则路径大小则为父节点的基础上+1。该题如果求树上所有节点到路径的最短距离,不是很好求,但是如果换个角度,从路径上的起点出发,路径上的标记的点dist为0,求该路径到树上所有节点的最小距离和,就会很方便。该题的坑比较多,读题的时候思路为将每个字母个数记录一下,然后遍历字符串,用其他的字母填入,如果有一个字母个数大于其他所有字母总和,输出-1。
2024-10-22 00:15:48
1246
原创 牛客周赛 Round 58
比如三进制下 1010 ,可用(1000+10) 两个k的整次幂表示一个3-好数,将n转化为k进制,然后将数位上的数字求和,当时想的是求n转换为n个k的整次幂的数。n可表示为1^1 +1^2+…直到等于n ,因此k==1时 输出1。定义k-好数为:可以表示为若干个不同的k的整次幂之和的数字。而2020 ,可用 (1000+10)+(1000+10)例如30= 3^3 + 3^1 ,30是一个3-好数。只能将n表示为n个k^0 ,因此n<k时 输出n。给定一个数n,n最少可以表示成几个k-好数的和。
2024-09-03 21:07:25
348
1
原创 河南萌新2024第六场
给定一排n个格子,n个格子里有不同的人,每次可从 j 号格子中选择两个人分别逃到 i 号格子和 k 号格子,要求i<j<k ,且1<j<n,如果n个格子里所有人都可以逃到1或n号格子,那么输出奔逃次数,否则-1。我的第一思路是如果在给幸福度开一维,依次枚举幸福度,肯定会超时,所以想将饱食度不是16的倍数的月饼合并到一起凑成一个16的倍数,简化成一个朴素01背包,但是我发现实现不了,因为组合成16的倍数有很多种组合方式。给定每个人面对的方向,问m次游戏后,每个人面朝方向,正面为1,反面为0。
2024-08-25 22:07:26
965
2
原创 河南萌新2024第四场
该题目有点像 算法进阶指南中楼兰图腾的变形,在楼兰图腾中求的是在一个序列中先升后降 和先降后升的图案总数,如果是先升后降,需要遍历每个数字左边所有比该数小的数字,右边比该数小的数字,相乘就是该数字构成的图案总数,,v)之间举办一次马拉松,该国家有两个城市 x 和 y,当小明经过 x 城市后又跑到 y 城市,那么该城市的警察就会阻止小明继续参加比赛。有n个岗位,m位志愿者,每个岗位至少需要a个志愿者,并且可以有志愿者可以空闲下来作预备,给出可能的分配情况总数。在求法方面比较特殊,我们只需要。
2024-08-25 22:04:26
510
原创 河南萌新2024第三场
如果想要吃的最多,由于左右两边都是求得单调递减的,所以x必然有一种方式能将左右两边邻居都吃掉,该题不输出怎么吃,因此,可以使用单调栈求一下x左右两边的单调递减区间。q 次查询,每次查询给出一个用户名,一个 IPv4 地址以及此次登录使用的私钥,要求你判断该 IPv4 地址对应的主机上的用户,是否拥有这个私钥对应的公钥。有n个史莱姆排成一条线,1~n,第i只体积为ai,当且仅当他的体积大于等于邻居时,可以吃掉邻居,体积变为邻居的体积,求每个史莱姆最多可以吃多少个同伴。中用户名进行查询,找到对应用户后,将。
2024-08-25 22:03:56
469
1
原创 河南萌新2024第二场
将用户名和对应信息set映射到map中: map< string ,set< string > > 方便了存储。给两个整数a和b,输出a∗b 但是a,b非常大,0
2024-08-25 22:03:20
2005
原创 树状数组(2进制优化前缀和)
如果三个点 (i,yi),(j,yj),(k,yk)满足 1≤i<j<k≤n 且 yi>yj,yj<yk,则称这三个点构成。如果三个点 (i,yi),(j,yj),(k,yk)满足 1≤i<j<k≤n 且 yi<yj,yj>yk,则称这三个点构成。的,那么我们就可以统计x出现时,在x左边出现且比他小的数的个数ask(x-1),比他大的个数ask(n)-ask(x)设坐标分别为 (1,y1),(2,y2),…来求的,先不管怎么去算出数组,看几张图,理解数组是怎么构造的,换句话说,数组是怎么。
2024-08-19 09:59:24
826
原创 3.2.5 最短路径 floyd算法
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。数据保证图中不存在负权回路。,分别遍历每一个顶点k,将顶点k作为中间节点,**min( i -> j , i -> k -> j )**更新。的最短路径,三重循环过后,d [ i ] [ j ] 存储的为 i -> j 的最短路径。Floyd算法的实现思路是通过。不断迭代来更新最短路径。
2024-08-06 20:27:15
327
原创 3.2.4 最短路径 spfa算法
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。bellman算法中暴力枚举所有的边,但并不是每个点都会更新,存在无效遍历。拿未更新最短路径的点去更新其他点是没有意义的。(n个点最多n-1条边),则一条边出现了。,直至找到1号点到n号点的最短路径。在求最短路径的时候,只有这个。
2024-08-06 14:43:04
460
原创 3.2.3 最短路径 Bellman-Ford算法
请你求出 1 号点经过最多 k 条边到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible。在内循环中遍历了所有的边,但是需要控制有限的次数,所以每次只能更新走一条边到达的距离。例:先更新了2号点,又用2号点更新了3号点,发生串联,此时就不能保证走了多少次了。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为。:更新时只用上一次循环的结果,因此需要将dist[]每次备份一遍。,那么该距离更新的是从1号点。:两边之和大于第三边。
2024-08-06 10:53:28
312
原创 3.2.2 最短路径 堆优化版Djkstra算法
给定一个n 个点m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。求 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 − 1。节点个数和边的个数相差不多,为稀疏图,使用邻接表存储,并用堆优化版Dijkstra算法计算最短路径。
2024-08-05 20:27:44
372
原创 3.2.1 最短路径 朴素Djkstra算法
请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。边数远大于点数,属于稠密图,用邻接矩阵来存,朴素Djkstra算法求最短路径。迭代n次后,如果n号点到1号点的最短路径不为正无穷,则存在最短路径。存图时也需要先将所有节点的边初始化为正无穷。图中涉及边长均不超过10000。Djkstra初始化,,直到 到达n号节点。
2024-08-05 15:56:43
309
原创 3.1 拓扑排序
给定一个n 个点m 条边的有向图,点的编号是1 到n ,图中可能存在重边和自环。输出其任意一个拓扑序列。如果不存在则返回− 1。acwing 848 有向图的拓扑序列。
2024-08-01 19:44:06
213
原创 STL set
对于set容器来说,因为set容器会进行排序,每次可能在首尾插入,也可能在中间,所以用insert()对于vector容器的插入,是从尾部插入的,所以时push() or push_back()因为set容器不允许元素重复出现,因此s.count()函数只会返回0 or 1。set容器中不允许出现重复元素,并且容器会自动排序(默认为升序排列)如果在set容器中找到元素,会返回一个迭代器指向该元素所在位置。如果没有找到则会返回set末尾迭代器s.end();s.insert(元素)s.erase(元素)
2024-07-21 20:25:20
233
原创 河南萌新联赛2024第(一)场 D小蓝的二进制询问
每次递归t时,从x中减掉已经加过的数据,直至一组所求数据个数小于2^(i+1)个(不满足一组完整的数据)例如将14(1110)分为2^ 3+2^ 2+2^ 1 (2^ x+2^ y+2^ z)每组数据 需将 上一组数据 复制一次 每个复制的数据还需加上1(共2^i个1)剩余部分的14(1110)可分为对应的8(1000),4(100),2(10)例如剩下6()个数,可以把6分为2^2+2 ^1 (2 ^x+2 ^y)分离出的 第三组 与 实际第三组 相比 相差 (2)* 2^i 个1。
2024-07-18 14:07:50
466
1
原创 Codeforces Round 958 (Div. 2) C. Increasing Sequence with Fixed OR
例:lowbit(4)-x=~x+1;(x取补码+1)用该操作来确定二进制是否只有一个1二进制—>十进制时如果使用pow()函数要把返回时强制转换为(long long)pow()默认返回值时double,由于存在小数部分长度问题,存在截断误差建议使用递归方式计算long//范围1e18,2^63,开100足够记录二进制 int a [ N ] , b [ N ];//a存n的二进制,b记录答案,k,f分别为二者指针 int lowbit(int x) //返回第一个1的位置 {
2024-07-16 11:26:13
439
1
原创 STL关于sort字符串的排序(string数组,char数组)
给定n个字符串,字符串序号按字典序排列(0~n),n个数字,这n个数字和对n求余k,输出第k个出现的字符串。将气球存入string数组,用STL中sort将气球按字典序排列,这样相同的气球就会在一起。给定m个n长度的dna序列,要求按它们中存在的逆序字母个数排序(个数升序排列)首先从后往前遍历dp出每个字符串中逆序字母的数量,再按逆序字母数量排序。将该字符串存入ch[]中,sort后枚举ch[]中字母,判断是否符合。给定n个随机颜色(颜色用字符串表示)的气球,输出出现次数最多的气球。
2024-05-26 10:37:53
623
原创 2023ICPC杭州区域赛
链中每个节点最多有两条边,而菊 中心节点大于等于三条边相连,因此只需找到任意一条连接的边,再找出两个不同于此边上的节点,判断此边上的节点(若是菊,则有一个一定是中心节点)是否可以与这两个不同的点连接,如果中心节点可以和这两个节点相连,则是菊,否则是链。从b点开始,左边的数均比b大,加上后平均值一定比当前的数大,但是此时如果向右边规划,不能保证加上右边的数平均数一定会增大,因为无法保证右边的数比当前的平均数大。V图:长度>=3,且包含一个最小值,最小值前面的数降序排列,最小值后面的数升序排列。
2024-05-20 19:19:53
1522
1
原创 2024ccpc中国郑州
根据数据范围n<1e8,longlong 19位,所以可以先构造kk=1234567890+d,并将n加到kk的后面去构造n的倍数找k(如果不加n直接除n,可能使1234567890+d(幸运数序列)造成影响)。n的各个数位互不相同,可得出末尾偶数0,2,4,6,8均为2的倍数,末尾为5为5的倍数,此时还剩4个数,n保证5位,所以排序后一定可以构成合数。直接判断末尾是不是0,2,4,6,8,5,是直接输出,不是就从前四位中找一个0,2,4,6,8,5与末尾交换位置即可。
2024-05-19 20:27:58
2175
1
原创 L - 养成游戏
这个游戏的终极目标是在最后的展示大会上获得最高的评分,最后的展示大会上有一些评委,每个评委都有各自的评判标准,当你达成了这个评委的评判标准,你就能获得这个评委的评分,评委的评判标准格式如下,可以由一个整数七元组 表示。题目大意:获得最高的评分,数据范围很小6^8*100,可以直接枚举出所有属性值,依次判断是否符合裁判的评分要求,每次枚举出的分数取最大的。接着有 m 行,每行有七个整数 i, j, op, a, b, d, v,表示一组评委的评判标准。输出一个整数代表她可以获得的最高评分。
2024-05-05 19:55:11
409
2
原创 F - 最长上升子序列
你原本有一个 1 到 n 的排列,但是不慎地,你遗忘了它,但是你记得以 第i个位置 结尾的最长上升子序列的长度数组 {an} ,现在希望你能够构造一个符合条件的排列 p ,如果不存在符合上述条件的排列 p ,则输出 - 1。因为i位置上为到当前位置最长的子序列长度,所以存入数据时要判断该数据前面数据是否存在该长度-1的最大子序列,如果不存在,无论如何都不能达到该数据的最长子序列输出-1;这里定义以 第i位置 结尾的最长上升子序列的长度,为符合以下条件的整数数组 中 k 的最大值。
2024-05-05 19:50:26
237
2
原创 HDU - 6542 SSY and JLBD
一副麻将由 136 张牌组成。它包含三种花色的1-9张牌,以及七种单词牌(“dong”,“nan”,“习”,“bei”,“zhong”,“fa”,“bai”),一副麻将中每种牌有4张相同的牌。:保证是同种花色的数字牌,至少3张的1,9。最后一张如果是数字牌就是同种的花色的任意一张,或者是任意一张单词牌。:同时拥有三种花色的1,9牌,7种单词牌+任意花色1,9或单词牌。
2024-04-28 19:11:21
149
1
原创 HDU - 6543 Can you raed it croretcly?
相同,遍历1~len-2中字母出现次数,如果错误单词和正确单词字母出现次数相同,则可以通过换顺序改对,否则不可以。判断一个首字母和尾字母相同的拼写错误的单词是否可以通过改变字母顺序变成一个正确的单词。判断错误单词与正确单词的长度,如果不相同就不可以改变顺序。判断首字母和最后一个字母是否相同,不相同不可以。
2024-04-28 15:15:26
252
1
原创 HDU-6536 Hello XTCPC
找到x所在位置,依次从x位置遍历找序列tCpc,因为每个字母只能用一次,找到一个就将该字母换为‘-’。2.给定一串字符串s,在s中找尽可能多的“xtCpc”序列,每个字母只能使用一次(尽可能多就是要按顺序找)此时xtCpc子序列就找完了,c里面保存的就是完整的子序列出现次数。如果找到t,就看前面有没有x,如果x!如果找到C,就看前面有没有t,如果t!如果找到p,就看前面有没有C,如果C!如果找到c,就看前面有没有p,如果p!
2024-04-28 14:49:15
269
1
原创 PTA L1-101 别再来这么多猫娘了!
3,可以使用string数组保存违禁词,输入给定字符串t时可用getline(cin,t);s.find(t):在s字符串中找字符串t,找到返回t[0]在s字符串中的下标,找不到返回-1;s.insert(x,”=-=“):在s字符串x位置插入”=-="字符;给定n个违禁词(字符串),一个违禁词阈值,在一个给定字符串中查找违禁词。2,违禁词有可能是"“.,造成重复替换,TLE。不超过违禁词,将违禁词替换为"".4,string有关的函数。
2024-04-26 15:51:11
361
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人