CDOJ 1964 命运石之门【最短路径Dijkstra/BFS】
给定数字n,m(1<=n,m<=500000)
将n变为n*2花费2,将n变为n-3花费3,要求过程中所有数字都在[1,500000]区间内。
求将n变为m的最少花费
思路:建图
将每个数字视为图中的点,数字之间的转换视为图中的边,有向图。
500000个点,(i,i*2)权值为2,(i,i-3)权值为3
转换为求n至m的最短路径
#include <bits/stdc++.h>
using namespace std;
const long long INF = 0x3f3f3f3f3f3f3f3f;
int n,m;
vector<pair<long long,int>> edge[];
long long dis[];
typedef pair<long long,int> P;//first 最短距离,second顶点编号 void dijkstra(int s)
{
memset(dis,INF, sizeof(dis));
priority_queue<P,vector<P>,greater<P>> que; //最小堆
que.push(P(,s));
dis[s]=;
while(que.size())
{
P p=que.top();que.pop();
int v = p.second;
//vis[v]=1;
if(dis[v]<p.first)continue;
for(int i=;i<edge[v].size();i++)
{
int to = edge[v][i].second;
long long cost = edge[v][i].first;
//if(!vis[to]&&dis[to]>dis[v]+cost)
if(dis[to]>dis[v]+cost)
{
dis[to]=dis[v]+cost;
que.push(P(dis[to],to));
}
}
}
if(dis[m]==INF)
cout<<-<<endl;
else
cout<<dis[m];
} int main() {
cin >> n >> m;
for (int i = ; i <= ; i++)
{
if(*i<)
edge[i].push_back(make_pair(,*i));
if(i->)
edge[i].push_back(make_pair(,i-));
}
dijkstra(n);
return ;
}
思路2:暴力BFS
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
typedef long long LL;
int n,m;
struct node
{
int x;
LL cost;
};
int vis[]; int main() {
cin >> n >> m;
node cur,now;
cur.x=n,cur.cost=;
queue<node> q;
q.push(cur);
LL ans=1e18;
vis[cur.x]=;
while(q.size())
{
now=q.front();q.pop();
if(now.x==m)
{
ans=min(ans,now.cost);
continue;//剪枝
}
cur.x=now.x*;
cur.cost=now.cost+;
if(cur.x<=&&!vis[cur.x])
{
vis[cur.x]=;
q.push(cur);
}
cur.x=now.x-;
cur.cost=now.cost+;
if(cur.x>&&!vis[cur.x])
{
vis[cur.x]=;
q.push(cur);
}
}
if(ans==1e18) printf("-1\n");
else cout<<ans<<endl;
return ;
}
CDOJ 1964 命运石之门【最短路径Dijkstra/BFS】的更多相关文章
- UESTC-1964命运石之门(类似SPFA的BFS)
命运石之门 Time Limit: 1000 MS Memory Limit: 256 MB Submit Status "这一切都是命运石之门的选择!" 凶真博士发明了能 ...
- 理解最短路径-Dijkstra算法
最短路径—Dijkstra算法和Floyd算法 透彻理解迪杰斯特拉算法 Dijkstra算法的使用条件:图中不存在负权边. ---------------------------有待验证------- ...
- 最短路径问题,BFS,408方向,思路与实现分析
最短路径问题,BFS,408方向,思路与实现分析 继上回挖下的坑,不知道大家有没有认真看最小生成树呢?很简单,这回也讲讲正常难度的,看不懂就来这里看看,讲的很好~~ 最短路径问题 说起这个问题,先说个 ...
- 最短路径 dijkstra
最短路径 dijkstra #include <stdio.h> #include <string.h> #include <limits.h> #define M ...
- 网络最短路径Dijkstra算法
最近在学习算法,看到有人写过的这样一个算法,我决定摘抄过来作为我的学习笔记: <span style="font-size:18px;">/* * File: shor ...
- c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法
c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
- 最短路径——Dijkstra算法和Floyd算法
Dijkstra算法概述 Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图(无 ...
- 最短路径-Dijkstra算法与Floyd算法
一.最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1 ADE:2 ADCE:3 ABCE:3 ②在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径 ...
随机推荐
- VC使一个对话框不显示
//add this void CbkDlg::OnNcPaint() { ShowWindow(SW_HIDE); CDialog::OnNcPaint(); } 初始化时 ...
- 题解-PKUWC2018 Minimax
Problem loj2537 Solution pkuwc2018最水的一题,要死要活调了一个多小时(1h59min) 我写这题不是因为它有多好,而是为了保持pkuwc2018的队形,与这题类似的有 ...
- SharePoint 2013: Workflow Manager Backend 服务意外地终止
一.环境:SharePoint 2013 + Workflow Manager 1.0 二.错误描述: Workflow Manager Backend 服务意外地终止,这种情况已经出现了 42106 ...
- 2.4G和5G的Wi-Fi各自优缺点对比
原文地址:http://service.tp-link.com.cn/detail_article_3366.html 1.为什么5G信号的穿墙效果比2.4G信号差? 与路由器的距离相同时,5G信号相 ...
- 阿里云服务器上通过Docker部署redmine
背景:在日常工作的过程中会遇到各种各样的问题,每个问题来了之后需要花时间解决.这里就面临两个问题. 1:问题责任不明确,有时候会遇到数据库或者物理服务器的问题,这时候就需要把相应问题指派给相应的人,传 ...
- 006_理解inode
inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念 ...
- Spring 邮件发送
前言:以前都是直接用Java自带的邮件工具发送邮件,现在Spring帮我们做了封装,提供了更好用更简单的发送邮件工具JavaMailSender 关于邮件服务器的设置就不在这里说了,直接去QQ邮箱 ...
- Day6------------软连接和硬链接
一.块 1.操作系统分四大类块 super block 掌管全局 inode block directory block block 2.删文件 普通删除只是删除链接,数据还在硬盘 彻底删除:覆盖操作 ...
- Spring Cloud构建微服务架构(五)服务网关
通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: 我们使用Spring Cloud Netflix中的Eureka实现了服务 ...
- 软件测试作业 - fault error failure
给出的题目如下: 我的解答如下: For program 1:1. where i > 0 is the fault , it should be changed to i>= 0 to ...