Week 2 题目总结 (图论)

Part 1 周赛补题

1.Dima and Salad

题目大意:有n个水果, 每个水果都有两个属性值ai表示美味程度, bi表示能量值, 现在要求选出一个或多个水果, 使得选出的水果的ai和与bi和的比例是k 问在这种清形可能出现的情况下ai的和最多是多少。

解题思路:把式子整理一下:\small \sum_i^{m} a_i/\sum_{i}^{m}b_i=k变成\small a_i-k*b_i=0,因此将\small w=a_i-k*b_i作为背包重量,因为w可正可负,因此dp[0]加上偏移量10000,即dp[10000]即为答案。另外需要注意的是,w为正时倒序枚举,w为负时正序枚举。

2.Slipper

 题目大意:给定一个树,问两点间的最短路径,如果深度差距为K那么可以用一定花费去跳越。

 解题思路:链式前向星,e数组开N<<3(3倍),先读入并add(u,v,w),再用dfs(u,fa)计算每个节点的深度,根节点为0,然后在每一层中都连接两个虚拟点,一个作为出边,一个作为入边,边权为0,作为中转点,然后深度差距为K的虚拟点之间相互连接边权为P,需要注意上层的出点与下层入点向连,下层的出点与上层的入点相连。最后dijkstra(),用\small priority\_queue<pair<ll,int> >q;优化,用\small q.emplace(-dis[v],v)写入花费和节点,最后输出\small dis[t]

3.Connect the Cities

题目大意:最小生成树

解题思路:用Kruskal算法易超时,推荐Prim算法。

4.Tunnel Warfare

 题目大意:以下所示的不同格式描述了三种不同的事件: D x:第x个村庄被毁。 Q x:指挥官询问第x个村庄与其直接或间接相关的村庄数量。 R:最后毁坏的村庄被重建了,输出每个Q。

 解题思路:本意是线段树,但可以STL大法蒙混过关。用set记录被删除的编号,每次用\small set.lower\_bound(x)查询第一个大于等于x的被删除元素的迭代器 r,r--得到第一个小于等于x的元素,最后输出\small *r-*(--l)-1

Part 2 最短路问题

5.Til the Cows Come Home

题目大意:给定一个 n个点,m 条边的图,求从节点 1 到节点 n 的最短路。

解题思路:dijkstra模板题,前向星+堆优化版。

6.MPI Maelstrom

题目大意:单源最短路

解题思路:前向星+堆优化版,重点在于理解矩阵下三角输入。

7.Silver Cow Party

题目大意:给定n个节点,m条带权单向路,特殊节点x,求所有节点到达x再返回的距离最大值。

解题思路:正向图反向图分别跑一遍dij算法,将两个dis数组求和,枚举找到最大值输出。

8.Invitation Cards

题目大意:正向图反向图最短路径和。

解题思路:链式前向星+堆优化dij版,小技巧:开二维数组,第一位传入0或1代表正反向。

9.Heavy Transportation

题目大意:N个点,M条边,每条边有权值。求一条1号点到N号点的路径,要求使得路径中的边权最小值最大

解题思路:dij,用\small min(dis[u],W[i])更新该路径边权最小值,\small dis[v]<min(dis[u],W[i])更新最大值。

10.Frogger

题目大意:找到一条路径,使边权最大值最小

解题思路:dij,先初始化每个点到起点的距离,用\small max(dis[t],len)更新一条路径的最大边权,用\small dis[j]>max(dis[t],len)更新经过此点的路径中最小 最大边权。

11.The Shortest Path in Nya Graph

题目大意:同周赛题2.Slipper

解题思路:同周赛题,链式前向星+堆优化dij,少了求每个节点的深度。

12.Subway 

题目大意:单源最短路改编

解题思路:dij,邻接矩阵+堆优化版,点坐标用struct存储,每个struct作为一个节点,最后(int)+0.5四舍五入。

13.昂贵的聘礼

题目大意:单源最短路改变

解题思路:dij,把物品看作结点,互换关系看作边,求最小花费也就是从起点到某一点的最短路径。不过还需处理等级限制,只需要枚举等级区间,即\small -i<=lev[1]-lev[j]<=m-i

14.Tram

题目大意:给定n节点,节点之间有道路相连,但是每个节点都有个开关,只有开关指向的节点才能通行,你可以搬动开关。给定起点终点,求最少搬动开关次数。

解题思路:链式前向星+spfa。对于每个节点,初始开关对准的节点连边,权值为0,对于连边,权值为1。跑一遍起点到终点最短路,dis数组求出来的就是最少搬动开关次数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值