2022-01-06:N个结点之间,表世界存在双向通行的道路,里世界存在双向通行的传送门. 若走表世界的道路,花费一分钟. 若走里世界的传送门,不花费时间,但是接下来一分钟不能走传送门. 输入: T为
2022-01-06:N个结点之间,表世界存在双向通行的道路,里世界存在双向通行的传送门.
若走表世界的道路,花费一分钟.
若走里世界的传送门,不花费时间,但是接下来一分钟不能走传送门.
输入: T为测试用例的组数,对于每组数据:
第一行:N M1 M2 N代表结点的个数1到N
接下来M1行 每行两个数,u和v,表示表世界u和v之间存在道路.
接下来M2行 每行两个数,u和v,表示里世界u和v之间存在传送门.
现在处于1号结点,最终要到达N号结点,求最小的到达时间 保证所有输入均有效,不存在环等情况 。
来自网易互娱。
答案2022-01-06:
单元最短路径问题。小根堆。
代码用golang编写。代码如下:
package main
import (
"fmt"
"math"
"sort"
)
func main() {
roads := [][]int{{1}, {2}, {0}}
gates := [][]int{{1}, {2}, {0}}
ret := fast(3, roads, gates)
fmt.Println(ret)
}
// 城市编号从0开始,编号对应0~n-1
// roads[i]是一个数组,表示i能走路达到的城市有哪些,每条路都花费1分钟
// gates[i]是一个数组,表示i能传送达到的城市有哪些
// 返回从0到n-1的最少用时
func fast(n int, roads, gates [][]int) int {
distance := make([][]int, 2)
for i := 0; i < 2; i++ {
distance[i] = make([]int, n)
}
// 因为从0开始走,所以distance[0][0] = 0, distance[1][0] = 0
// distance[0][i] -> 0 : 前一个城市到达i,是走路的方式, 最小代价,distance[0][i]
// distance[1][i] -> 1 : 前一个城市到达i,是传送的方式, 最小代价,distance[1][i]
for i := 1; i < n; i++ {
distance[0][i] = math.MaxInt64
distance[1][i] = math.MaxInt64
}
// 小根堆,根据距离排序,距离小的点,在上!
//PriorityQueue<Node> heap = new PriorityQueue<>((a, b) -> a.cost - b.cost);
heap := make([]*Node, 0)
//heap.add(new Node(0, 0, 0));
heap = append(heap, NewNode(0, 0, 0))
//boolean[][] visited = new boolean[2][n];
visited := make([][]bool, 2)
for i := 0; i < 2; i++ {
visited[i] = make([]bool, n)
}
for len(heap) > 0 {
sort.Slice(heap, func(i, j int) bool {
return heap[i].cost < heap[j].cost
})
//Node cur = heap.poll();
cur := heap[0]
heap = heap[1:]
if visited[cur.preTransfer][cur.city] {
continue
}
visited[cur.preTransfer][cur.city] = true
// 走路的方式
for _, next := range roads[cur.city] {
if distance[0][next] > cur.cost+1 {
distance[0][next] = cur.cost + 1
heap = append(heap, NewNode(0, next, distance[0][next]))
}
}
// 传送的方式
if cur.preTransfer == 0 {
for _, next := range gates[cur.city] {
if distance[1][next] > cur.cost {
distance[1][next] = cur.cost
heap = append(heap, NewNode(1, next, distance[1][next]))
}
}
}
}
return getMin(distance[0][n-1], distance[1][n-1])
}
type Node struct {
preTransfer int
city int
cost int
}
func NewNode(a, b, c int) *Node {
res := &Node{}
res.preTransfer = a
res.city = b
res.cost = c
return res
}
func getMin(a, b int) int {
if a < b {
return a
} else {
return b
}
}
执行结果如下:

2022-01-06:N个结点之间,表世界存在双向通行的道路,里世界存在双向通行的传送门. 若走表世界的道路,花费一分钟. 若走里世界的传送门,不花费时间,但是接下来一分钟不能走传送门. 输入: T为的更多相关文章
- Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)
目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...
- 应用程序 /dev/rtc 编程 获取时间 2011-12-13 01:01:06【转】
本文转载自:http://blog.chinaunix.net/uid-16785183-id-3040310.html 分类: 原文地址:应用程序 /dev/rtc 编程 获取时间 作者:yuwei ...
- 检索06 - Oracle MySql SqlSever之间的区别和优缺点
三者之间区别 历史 1 Oracle:中文译作甲骨文,这是一家传奇的公司,有一个传奇的大老板Larry Ellision. Ellision 32岁还一事无成,读了三个大学,没得到一个学位文凭,换了十 ...
- 2015.01.06 JQuery
jQuery是一个兼容多浏览器的javascript库.开发出来的JavaScript的脚本包.非侵入性的脚本. 下载地址:http://jquery.com/ (打不开网页需要翻* ...
- Golang里实现Http服务器并解析header参数和表单参数
在http服务里,header参数和表单参数是经常使用到的,本文主要是练习在Go语言里,如何解析Http请求的header里的参数和表单参数,具体代码如下: package server import ...
- http://www.cnblogs.com/henw/archive/2012/01/06/2314870.html
C#多线程学习 之 线程池[ThreadPool] 在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然后才能给予响应 ...
- lucene正向索引(续)——域(Field)的元数据信息在.fnm里,在倒排表里,利用跳跃表,有利于大大提高搜索速度。
4.1.2. 域(Field)的元数据信息(.fnm) 一个段(Segment)包含多个域,每个域都有一些元数据信息,保存在.fnm文件中,.fnm文件的格式如下: FNMVersion 是fnm文件 ...
- 猿题库 iOS 客户端架构设计(原文地址:http://gracelancy.com/blog/2016/01/06/ape-ios-arch-design/)
猿题库 iOS 客户端架构设计 序 猿题库是一个拥有数千万用户的创业公司,从2013年题库项目起步到2015年,团队保持了极高的生产效率,使我们的产品完成了五个大版本和数十个小版本的高速迭代.在如此快 ...
- 钉钉的收费 [钉钉深圳研发团队 denny/2016.01.06/ 59888745@qq.com]
普通用户(个人) 团队 企业 1.免费额度为每月通话100分钟.每天发DING 5次. 1. 每月通话300分钟,每天发DING 10次. 2. 群组最多可达1500人 1. 该公司所 ...
- 夺命雷公狗---在js里阻止a标签的跳转和form表单的跳转
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
随机推荐
- mysql 以自增id等于某个random()函数算出的值为条件查出两条数据
SELECT id FROM users WHERE id = FLOOR( rand() * ( (SELECT max(id) FROM users) - (SELECT min(id) FROM ...
- 记一次 .NET某汽车零件采集系统 卡死分析
一:背景 1. 讲故事 前段时间有位朋友在微信上找到我,说他的程序会出现一些偶发卡死的情况,让我帮忙看下是怎么回事,刚好朋友也抓到了dump,就让朋友把 dump 丢给我,接下来用 windbg 探究 ...
- [WinUI 3] 如何利用D3D11在SwapChainPanel控件上绘制OpenGL(Uwp通用)
预览 技术实现 看过我上篇在 WPF 中实现 OpenGL 与 D3D 渲染的同学应该知道,我是依靠 WGL 中 WGL_NV_DX_interop 扩展与 D3D Surface 关联并在使用该 S ...
- android使用---->常用组件1
在TextView中创建空心文字 <TextView android:layout_width="wrap_content" android:layout_height=&q ...
- 微软 New Bing AI 申请与使用保姆级教程(免魔法)
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 最近的 AI 技术实在火爆,从 OpenAI 的 ChatGPT,到微软的 New Bi ...
- 回顾.NET系列:Framework、Net Core、Net 过往
目录 一.个人最近工作变化 二.Framework.Net Core..NET 时过境迁 Framework:爱你定格在4.8 .Net Foundation:.Net变革大脑 重新统一的 .NET ...
- internal java compiler error
1.导入Maven项目运行报错: 解决方法:找到File->Settings 修改配置 再次运行就可以了.
- day117:MoFang:宠物栏的功能实现&宠物道具的使用
目录 1.宠物栏的功能实现 2.宠物道具的使用 1.宠物栏的功能实现 1. 宠物的显示 2. 宠物的使用 3. 宠物的饱食度 4. 宠物的开锁 1.服务端提供显示宠物的api接口 orchard/so ...
- 用Abp实现两步验证(Two-Factor Authentication,2FA)登录(二):Vue网页端开发
@ 目录 发送验证码 登录 退出登录 界面控件 获取用户信息功能 项目地址 前端代码的框架采用vue.js + elementUI 这套较为简单的方式实现,以及typescript语法更方便阅读. 首 ...
- 【深度学习】【图像分类网络】(二)VisionTransformer
Transformer简介 ![1png](file:///D:/资料/学习笔记/深度学习/图像分类/transformer/Self-Attention以及Multi-Head Attention/ ...