算法刷题
lwd4399
这个作者很懒,什么都没留下…
展开
-
P3366 【模板】最小生成树(堆优化的prim算法)
堆优化的prim算法 #include<queue> #include<iostream> #include<algorithm> #include<stdlib.h> #include<stdio.h> #include<string.h> #include<math.h> using namespace std; const int INF=0x3f3f3f3f; //定义无穷大 struct{ int to; in原创 2022-03-13 23:30:26 · 275 阅读 · 0 评论 -
P1907 设计道路
这是一道典型的最短路径题,用Dijkstra算法算法解决。算法复杂度为O(n^2)。 朴素的Dijkstra算法使用与稠密图单源最短路径,即边数远远大于顶点数的图,如果使用优先队列实现的Dijkstra算法称为堆优化的Dijkstra算法,算法复杂度可以达到O(m*log n)。(m为边的条数,n为顶点数) #include<iostream> #include<string.h> #include<stdlib.h> #include<algorithm>原创 2022-03-03 16:42:30 · 145 阅读 · 0 评论 -
P2895 [USACO08FEB]Meteor Shower S
这道题看上去是一道平平无奇的搜索题,但是有几个比较不容易被注意坑: 我用一个数组mp[310][310]来存储整个地图上陨石降落的时间与地点,在处理时产生了冲突如下图(图画得很丑 ): 根据题意,陨石降落地点周围的4个点都不能遍历,而输入数据不是根据时间点输入的,因此如果不进行处理的话,存在第一个时间点化为焦土的点先输入,后输入的第三个时间点的陨石数据会覆盖掉第一个时间点的信息,而该点早就不能通过。(如上图点(3,2)和(2,3)) 同时已经被砸过陨石的点可能还没还会被砸,也需要判断是否会导致信息出错。原创 2022-03-01 21:06:57 · 347 阅读 · 0 评论 -
P1162 填涂颜色
基本思路:要将被1包围的0改为2,很自然想到用DFS或者BFS算法,这里我使用DFS算法。然而,要找到被1包围的0并不容易,我们可以将问题转化为将不被1包围的0改为2,被1包围的0不变,而只需在输出时做判断修改输出既可。 #include<iostream> #include<string.h> #include<stdlib.h> #include<algorithm> #include<math.h> using namespace std;原创 2022-02-28 22:22:13 · 85 阅读 · 0 评论 -
P1596 Lake Counting S(DFS求连通块个数)
大致思路为:遍历所有点,找到‘W’时,DFS其周围的点,遇到 ‘.’ 就返回,同时将‘W’改为 ‘.’ ,一次DFS结束连通块个数加一。 #include<iostream> #include<string.h> #include<stdlib.h> #include<algorithm> #include<math.h> using namespace std; char mp[111][111]; int n,m; int dx[8]={0,0原创 2022-02-28 22:17:31 · 71 阅读 · 0 评论 -
P1352 没有上司的舞会
树形dp练习题一 (被考研复试机试折磨)我爱算法!!!! dp[u][0]表示u这个人去舞会的情况下的最大快乐值,dp[u][1]表示在u这个人不去参加舞会的情况下的最大快乐值。 对于任意节点u来说,设其孩子节点为p, 1、dp[u][0]的值为其孩子节点的dp[p][1](其孩子不能去)的总和。 2、dp[u][1]的值为其孩子节点dp[p][1]与dp[p][0]的最大值总和(孩子节点可以去也可以不去,选择能使快乐最大的那种情况)。 (ps:类似于在每个节点进行决策,根据去或者不去两种情况导致的不同快乐原创 2022-02-27 17:45:00 · 167 阅读 · 0 评论