图论-第k短路

A* 做法

\(f(p)=g(p)+h(p)\)\(f(p)\) 作为优先队列比较函数用来比较的值, \(g(p)\) 是当前路径到 \(p\) 的距离, \(h(p)\)\(p\) 点到终点最短路(预处理可以得到)。

每个点出队次数 \(k\),就说明当前找到的是到这个点的 \(k\) 短路。

关键代码

void astar(int bg)
{int cnt = 0;A.push(ast(bg, 0));while (!A.empty()) {ast p = A.top();A.pop();if (p.v == N) {if (p.w > E)break;E -= p.w, ++Ans;}for (int i = G[p.v].size() - 1; i >= 0; --i) {edge e = G[p.v][i];A.push(ast(e.v, p.w + e.w));}}return;
}

一道裸题: 【SDOI2010】魔法猪学院

#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>using namespace std;typedef double db;const int _N = 5100;
const db INF = 1e9;struct edge {int v;db w;edge(int v = 0, db w = 0): v(v), w(w) { }
};struct data {int v;db w;data(int v = 0, db w = 0): v(v), w(w) { }bool operator < (const data &tmp)const{return w > tmp.w;}
};db E, dis[_N];struct ast {int v;db w;ast(int v = 0, db w = 0): v(v), w(w) { }bool operator < (const ast &tmp)const{return w + dis[v] > tmp.w + dis[tmp.v];}
};priority_queue<data> Q;
priority_queue<ast> A;
vector<edge> G[_N], H[_N];
int Ans, N, M;void Gins(int a, int b, db c) { G[a].push_back(edge(b ,c)); return; }void Hins(int a, int b, db c) { H[a].push_back(edge(b, c)); return; }void dfs(int x, db cost)
{if (cost + dis[x] > E) return;if (x == N) {A.push(cost);return;}for (int i = G[x].size() - 1; i >= 0; --i) {edge e = G[x][i];dfs(e.v, cost + e.w);}return;
}void init(int bg)
{for (int i = 1; i <= N; ++i)dis[i] = INF;Q.push(data(bg, dis[bg] = 0));while (!Q.empty()) {data p = Q.top();Q.pop();if (dis[p.v] != p.w) continue;for (int i = H[p.v].size() - 1; i >= 0; --i) {edge e = H[p.v][i];if (dis[e.v] > p.w + e.w)dis[e.v] = p.w + e.w, Q.push(data(e.v, dis[e.v]));}}return;
}void astar(int bg)
{int cnt = 0;A.push(ast(bg, 0));while (!A.empty()) {ast p = A.top();A.pop();if (p.v == N) {if (p.w > E)break;E -= p.w, ++Ans;}for (int i = G[p.v].size() - 1; i >= 0; --i) {edge e = G[p.v][i];A.push(ast(e.v, p.w + e.w));}}return;
}int main()
{scanf("%d%d%lf", &N, &M, &E);for (int i = 1; i <= M; ++i) {int a, b;db c;scanf("%d%d%lf", &a, &b, &c);Gins(a, b, c), Hins(b, a, c);}init(N);astar(1);printf("%d\n", Ans);return 0;
}

转载于:https://www.cnblogs.com/ghcred/p/9775373.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Arm十年最大更新:V9架构正式发布

来源&#xff1a;由半导体行业观察&#xff08;ID:icbank&#xff09;编译&#xff1a;「anandtech」自Arm在2011年10月首次发布Armv8架构以来&#xff0c;已经过去了近十年的时间。这对Arm来说是一个相当可观的十年&#xff0c;因为在这段时间内&#xff0c;他们的指令集架构受…

输出错误信息

在error页面加以下代码&#xff0c;之后检查网页源代码就会出现错误信息 (URL,Exception是后台传过来的参数) <div><div th:utext"<!--" th:remove"tag"></div><div th:utext"Failed Request URL : ${url}" th:remove…

Lodop打印设计界面生成代码带”...(省略)”

Lodop的设计界面中&#xff0c;菜单里的生成代码&#xff0c;如果打印项内容过多&#xff0c;后面会显示”...(省略)”&#xff0c;省略的是打印项的内容值&#xff0c;无论是纯文本还是超文本&#xff0c;都可以用选中打印项-右键-设置属性里找到该打印项的全部值&#xff0c;…

南洋理工大学研发植物“通信”设备,未来可成为环境探测器

来源&#xff1a;MEMS 最新研究成果由新加坡南洋理工大学&#xff08;NTU&#xff09;领导的一个科学家团队开发了一种可以向植物发送电信号和从植物接收电信号的设备&#xff0c;为利用植物的新技术打开了大门。团队的发现于今年1月25日刊登于国际知名科学期刊《自然》属下的…

服务器核心知识

电脑&#xff1a;辅助人脑的工具 现在的人们几乎无时无刻都会碰电脑&#xff01;不管是桌上型电脑(桌机)、笔记型电脑(笔电)、平板电脑、智慧型手机等等&#xff0c;这些东西都算是电脑。虽然接触的这么多&#xff0c;但是&#xff0c;你了解电脑里面的元件有什么吗&#xff1f…

Spring AOP解析

AOP: Aspect Oriented Programming 面向切面编程。 AOP底层实现原理&#xff1a;代理模式 什么是代理模式&#xff1f; 通过代理控制对象的访问,可以详细访问某个对象的方法&#xff0c;在这个方法调用处理&#xff0c;或调用后处理。既(AOP微实现) ,AOP核心技术面向切面编程…

杜克大学和Facebook联手开发更好的光通信

来源&#xff1a;IEEE电气电子工程师Illustration: Duke UniversityA close-up depiction of the new fiber-free optical WiFi antenna. Silver nanocubes are spaced just a few nanometers above a silver base, with fluorescent dyes sandwiched in between. The physical…

Leetcode--287. 寻找重复数(Java)

给定一个包含 n 1 个整数的数组 nums&#xff0c;其数字都在 1 到 n 之间&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。假设只有一个重复的整数&#xff0c;找出这个重复的数。 示例 1: 输入: [1,3,4,2,2] 输出: 2 示例 2: 输入: [3,1,3,4…

优动漫PAINT核心功能介绍

优动漫PAINT是一款功能强大的动漫绘图软件&#xff0c;适用于个人和专业团队创作&#xff0c;分为个人版和EX版。搭载了绘制漫画和插画所需的所有功能——丰富的笔工具、超强的笔压感应和手颤修正功能&#xff0c;可分别满足画师对于插画、漫画和动画创作的针对性需求。 1. 实现…

2020图灵奖颁给“龙书”两位作者!合作数十年,他们让计算机读懂码农代码

来源&#xff1a;大数据文摘作者&#xff1a;Caleb就在昨天&#xff0c;2020年图灵奖公布了获奖名单。哥伦比亚大学计算机科学名誉教授Alfred Vaino Aho和斯坦福大学计算机科学名誉教授Jeffrey David Ullman共享了这一殊荣。根据国际计算机协会&#xff08;ACM&#xff09;报道…

C语言例题4

1.以下程序运行后&#xff0c;输出结果是 9.5 #include<stdio.h> #define PT 5.5 #define S(x) PT*x*x     int main( )     { int a1&#xff0c;b2;     printf(“%4.1f\n”&#xff0c;S(ab))     } PT*ab*ab5.5*12*129.5 2. 下列对字符串的定义中…

volatile关键字解析

volatile&#xff1a; 1.保证可见性 2.禁止重排序 我们先来看看一个问题&#xff0c;关于ii1的问题。 首先&#xff0c;他不是一个原子性的操作&#xff0c;我们通常将不可拆分的操作称为原子操作 而ii1需要先在主存中取得i的值&#xff0c;之后复制到高速缓存之中&#x…

HTML5/CSS3基础

1. HTML 1.1 什么是HTML HTML是用来制作网页的标记语言HTML是Hypertext Markup Language的英文缩写,即超文本标记语言HTML语言是一种标记语言,不需要编译,直接由浏览器执行HTML文件是一个文本文件,包含了一些HTML元素,标签等HTML文件必须使用.html或.htm为文件名后缀HTML是大小…

机器学习泰斗迈克尔 · 乔丹:不是什么都叫AI的

来源&#xff1a;IEEE Spectrum作者&#xff1a;Kathy Pretz编译&#xff1a;机器之心编辑&#xff1a;小舟、张倩「人工智能系统还远远不够先进&#xff0c;无法在涉及推理、运用现实世界知识和社交互动等许多任务中替代人类。」机器学习先驱迈克尔 欧文 乔丹&#xff08;Mi…

synchronized和lock的区别

公平锁。syn是非公平锁&#xff0c;无法保证线程按照申请锁的顺序获得锁&#xff0c;而Lock锁提供了可选参数&#xff0c;可以配置成公平锁&#xff0c;也可以配置成非公平锁。通常来说&#xff0c;非公平锁的效率比公平锁要高。 可中断锁。一个线程使用syn获取锁&#xff0c;除…

经典数值优化算法--专题学习

通用的损失函数最优化的数值方法&#xff0c;来源于泰勒展开式&#xff0c;多元函数的泰勒展开式为&#xff1a; 一、一阶逼近与一阶方法 一阶泰勒展开式&#xff1a; 其中&#xff0c;是代表了β变化的可能性&#xff0c;t在之后说到的梯度下降方法中演变成了学习速率。 现在&…

美国雷神公司对第六代战斗机的任务系统提出六点预测

来源&#xff1a;转载自公众号 “空天防务观察”图片&#xff1a;来源于网络编辑&#xff1a;朱锦锟审阅&#xff1a;原熙文2021年3月29日&#xff0c;美国雷神技术公司旗下的雷神情报与太空公司刊文&#xff0c;称该公司的工程师们针对可在未来“第六代”战斗机上运行的任务系…

Leetcode--394. 字符串解码(Java)

给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没有额外的空格&#xff0c;且…

人机猜拳

import java.util.Scanner;public class Person { Scanner input new Scanner(System.in); String name; int score; String action; int num; public void method() { System.out.println("\n请出拳&#xff1a;1.剪刀 2.石头 3.布"); boolean a true; do { num…

【专家观点】张亚勤、张宏江:人工智能的未来是什么?

来源&#xff1a;智能研究院“我们打造一个规模庞大的系统时&#xff0c;更需要具备系统思维&#xff0c;同时拥有动手能力、喜欢搭系统的人才……诞生至今&#xff0c;智源一直肩负着三项重要任务&#xff1a;一是构筑一个社区。二是打造一个真正适合青年科学家成长的平台。三…