poj2449 Remmarguts' Date 第K短路 A*

【已验证】基于STM32F407与AD9833的幅频特性测试装置设计与实现 本文详细介绍了基于STM32F407微控制器和AD9833 DDS芯片的低成本幅频特性测试装置设计与实现方法。通过扫频原理,该装置能自动生成正弦波信号,测量滤波器等电路的输出幅度变化,并在LCD屏幕或示波器上绘制幅频特性曲线。文章提供了从硬件选型、CubeMX工程配置、关键驱动代码编写到数据处理与可视化的完整教程,帮助电子爱好者与工程师快速搭建实用的滤波器测试工具。 阅读详情
Remmarguts' Date
Time Limit: 4000MS Memory Limit: 65536K
Total Submissions: 22226 Accepted: 6023

Description

"Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, he told them a story.

"Prince Remmarguts lives in his kingdom UDF – United Delta of Freedom. One day their neighboring country sent them Princess Uyuw on a diplomatic mission."

"Erenow, the princess sent Remmarguts a letter, informing him that she would come to the hall and hold commercial talks with UDF if and only if the prince go and meet her via the K-th shortest path. (in fact, Uyuw does not want to come at all)"

Being interested in the trade development and such a lovely girl, Prince Remmarguts really became enamored. He needs you - the prime minister's help!

DETAILS: UDF's capital consists of N stations. The hall is numbered S, while the station numbered T denotes prince' current place. M muddy directed sideways connect some of the stations. Remmarguts' path to welcome the princess might include the same station twice or more than twice, even it is the station with number S or T. Different paths with same length will be considered disparate.

Input

The first line contains two integer numbers N and M (1 <= N <= 1000, 0 <= M <= 100000). Stations are numbered from 1 to N. Each of the following M lines contains three integer numbers A, B and T (1 <= A, B <= N, 1 <= T <= 100). It shows that there is a directed sideway from A-th station to B-th station with time T.

The last line consists of three integer numbers S, T and K (1 <= S, T <= N, 1 <= K <= 1000).

Output

A single line consisting of a single integer number: the length (time required) to welcome Princess Uyuw using the K-th shortest path. If K-th shortest path does not exist, you should output "-1" (without quotes) instead.

Sample Input

2 2
1 2 5
2 1 4
1 2 2

Sample Output

14

  求第K短路,如果没有输出-1。
  以前是听过A*,现在才学习了一下。

  来自百度百科:
A*(A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法。估价值与实际值越接近,估价函数取得就越好。
公式表示为: f(n)=g(n)+h(n),
其中 f(n) 是从初始点经由节点n到目标点的估价函数,
g(n) 是在状态空间中从初始节点到n节点的实际代价,
h(n) 是从n到目标节点最佳路径的估计代价。
保证找到最短路径(最优解的)条件,关键在于估价函数h(n)的选取:
估价值h(n)<= n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。并且如果h(n)=d(n),即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行, 此时的搜索效率是最高的。
如果 估价值>实际值,搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。

  说简单点就是每个点有个值f(n),在优先队列中f值小的优先搜索。f=g+h。这道题里g是起始点到当前点走的步数,取h为当前点到终点的最短路。
  当h为0时就变成了BFS,也就是BFS是A*的一种特殊情况。
  可以自己想一下,如果在最短路上走,f不会变大,所以更可能优先被搜索,效率就会高。

  那么这道题先用dijkstra求出终点到其它点的最短路,然后用A*算法,对于每个点有g和h,加入优先队列,g+h小的优先。直到终点被加入优先队列K次。
  注意如果起点和终点相同,K要加1。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#include<queue>
#include<map>
using namespace std;

typedef pair<int,int> pii;

const int MAXN=1010;
const int MAXM=25;
const int MAXC=110;
const int MAXNODE=100010;
const int LOGMAXN=50;
const int INF=0x3f3f3f3f;

int N,M,S,E,K;
int d[MAXN];

struct Point{
    int u,d;
    bool operator < (const Point& rhs) const{
        return d>rhs.d;
    }
};
struct Edge{
    int u,v,dist;
};

struct Dijkstra{
    int n;
    int vis[MAXN];
    vector<int> G[MAXN];
    vector<Edge> edges;

    void init(int n){
        this->n=n;
        for(int i=0;i<n;i++) G[i].clear();
        edges.clear();
    }
    void add_edge(int u,int v,int dist){
        edges.push_back((Edge){u,v,dist});
        int m=edges.size()-1;
        G[u].push_back(m);
    }
    void dijkstra(){
        priority_queue<Point> q;
        memset(d,INF,sizeof(d));
        memset(vis,0,sizeof(vis));
        d[E]=0;
        q.push((Point){E,0});
        while(!q.empty()){
            Point tmp=q.top();
            q.pop();
            int u=tmp.u;
            if(vis[u]) continue;
            vis[u]=1;
            int len=G[u].size();
            for(int i=0;i<len;i++){
                Edge& e=edges[G[u][i]];
                if(d[u]+e.dist<d[e.v]){
                    d[e.v]=d[u]+e.dist;
                    q.push((Point){e.v,d[e.v]});
                }
            }
        }
    }
}solver;

struct Point2{
    int u,g,h;
    bool operator < (const Point2& rhs) const{
        return g+h>rhs.g+rhs.h;
    }
};

struct Astar{
    int n;
    int cnt[MAXN];
    vector<int> G[MAXN];
    vector<Edge> edges;

    void init(int n){
        this->n-n;
        for(int i=0;i<n;i++) G[i].clear();
        edges.clear();
    }
    void add_edge(int u,int v,int dist){
        edges.push_back((Edge){u,v,dist});
        int m=edges.size()-1;
        G[u].push_back(m);
    }
    int astar(int S,int E,int K){
        priority_queue<Point2> q;
        memset(cnt,0,sizeof(cnt));
        if(d[S]==INF) return -1;
        q.push((Point2){S,0,d[S]});
        while(!q.empty()){
            Point2 tmp=q.top();
            q.pop();
            int u=tmp.u,g=tmp.g,h=tmp.h;
            cnt[u]++;
            if(u==E&&cnt[u]>=K) return g;
            if(cnt[u]>K) continue;
            int len=G[u].size();
            for(int i=0;i<len;i++){
                Edge& e=edges[G[u][i]];
                if(d[e.v]!=INF) q.push((Point2){e.v,g+e.dist,d[e.v]});
            }
        }
        return -1;
    }
}solver2;

int main(){
    freopen("in.txt","r",stdin);
    while(scanf("%d%d",&N,&M)!=EOF){
        solver.init(N+1);
        solver2.init(N+1);
        int u,v,dist;
        while(M--){
            scanf("%d%d%d",&u,&v,&dist);
            solver.add_edge(v,u,dist);
            solver2.add_edge(u,v,dist);
        }
        scanf("%d%d%d",&S,&E,&K);
        if(S==E) K++;
        solver.dijkstra();
        printf("%d\n",solver2.astar(S,E,K));
    }
    return 0;
}


 

 

剪映专业版关键帧完全教程:从原理到实战的动画必修课 关键帧是视频动画的核心原理。视频由连续静止画面(帧)构成,关键帧记录素材属性变化的起始与结束状态,中间过渡帧由软件自动计算生成。剪映专业版中,视频、音频、文本、贴纸等素材均支持关键帧动画,可调节位置、缩放、旋转、不透明度、音量等参数。操作为:在起始位置点击参数旁菱形按钮添加关键帧,移动播放头后调整参数,系统自动生成第二个关键帧。多属性可独立控制并叠加,实现放大同时淡出等复合效果。通过设定变化起点与终点,关键帧能让静止元素产生移动、缩放、淡入淡出等丰富动态,是视频剪辑从基础拼接进阶创意表达的核心技能。掌握关键 阅读详情

相关推荐

【遥感数字图像处理(朱文泉)】第一章 数字图像基础

关于图像的定义、类型、模拟图像和数字图像

甜子yu的博客 4404

poj 2449 Remmarguts' Date k短路 A*

Remmarguts' Date Time Limit:4000MS Memory Limit:65536K Total Submissions:40172 Accepted:11024 Description "Good man never makes girls wait or breaks an appointment!" said the...

KIDGIN7439的专栏 1877

【微信小程序开发与设计】垃圾智能分类小程序

垃圾分类是将来生活可持续发展的必需项。但是很多人由于缺乏垃圾分类知识,或是因为垃圾分类困难,费时费力,所以没有好好贯彻垃圾分类政策,此时设计一款方便于群众进行智能化垃圾识别分类的微信小程序就显得尤为必要。

Markelle_Fultz的博客 8245

poj2449 Remmarguts' Date A*K短路

K短路

Elemmir的博客 1088

海康威视摄像机SDK二次开发--提取音频保存至文件

由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释 文件结构 其中CameraInfo内容可以参看海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中 HIKSDKSaveRealData中的内容 package ClientDemo; import ClientDemo.CameraInfo; import com.sun.jna.NativeLong; import

RichardoMu的博客 3173

【QGIS】软件下载安装及GIS4WRF插件使用

【QGIS】软件下载安装及GIS4WRF插件使用

WW、forever的博客 1799

POJ 2449 Remmarguts' Date 第K短路 A* + SPFA

题目大意就是给出一个图,然后给出一个起点个一个终点,求这两点间的第K短路。 本题中是可以走重复的路的,所以如果一张图中有一个环的话,无论求第几短路都是存在的。 网上大部分的方法都是用A* + 最短路的方法做的。   对于A* ,估价函数 = 当前值+当前位置到终点的距离,即 F(p)=g(p)+h(p),每次扩展估价函数值中最小的一个。对于k短路来说,g(p)为当前从s到p所走的长度

水 7587

智元机器人开源具身仿真框架 Genie Sim 入门教程

GenieSim是AgiBot推出的具身智能仿真框架,提供完整闭环开发管道,包括轨迹生成、模型训练和基准测试。框架支持Docker容器化部署,要求Ubuntu 22.04和NVIDIA硬件环境。主要功能涵盖: 支持12种基准测试任务 提供ADER评估框架 集成UniVLA/RDT等基线模型 支持PICO/键盘遥操作 具备轨迹记录回放功能 提供完整API控制接口 开发者可通过Hugging Face获取场景资产,使用标准化ROS主题与仿真环境交互。框架特别优化了碰撞检测和抓取物理模拟,适用于从简单抓取到复杂操

2506_90492529的博客 2540

POJ2449 Remmarguts' Date(k短路(A*优化))

POJ2449 Remmarguts’ Date 题意: 有n个节点,m条边,求任意两点间的第k短路径长度 分析: 是常规的k短路板子题 但是由于本蒟蒻有一段时间没写图论题了,wa了几发… 有几个需要注意的地方: 输入的边是有向边,我开始当作无向边做了。。。 当询问s到s的第k短路时需要特殊考虑,因为我们设置自身到自身的最短路长是0,然而图中并没有自环,所以实际上并不存在长为0的这条路径,需要排...

yudi的博客 324

C# 接口和抽象类

文章目录1. 什么是接口和抽象类2. 接口与单元测试3. 依赖&耦合4. 依赖翻转5. 单元测试 1. 什么是接口和抽象类 接口和抽象类都是“软件工程产物” 具体类->抽象类->接口:越来越抽象,内部实现的东西越来越少 抽象类是未完全实现逻辑的类(可以有字段和非public成员,它们代表了“具体逻辑”) 抽象类为复用而生:专门作为基类来使用,也具有解耦功能 封装确定的,开放不确定的,推迟到合适的子类中去实现 接口是完全未实现逻辑的“类”(“纯虚类”;只有函数成员;成员全部publi

汽车电子软件领域知识分享 1013

Qt版Dalsa线扫相机的采集Demo

Qt Dalsa

追赶时代的博客 604

POJ 2449Remmarguts' Date (A* 求K短路)

题目链接 题意 : 求一张有向图S->T的K短路。 思路 : 经典题目。 K短路最简单并且最暴力的方法是从起始点S爆搜下去, 把到达的x的距离d[x]不停的加入到一个优先队列中去, 最后然后每次取出最短距离节点u,然后cnt[u]++一直到到达了u = T && cnt[u] = k结束搜索。 这个方法复杂度似乎是O(M*K),对于这道题目是超时或者爆内存的 = = 。 网上看了下比较好也比

Dewey's blog 1212

C# 与 PaddleOCR:一行代码实现高效图片文字识别的实战指南

本文介绍了如何使用 PaddleOCRSharp 进行图像文字识别,涵盖了从环境准备到高级功能的完整流程。首先,通过 NuGet 安装 PaddleOCRSharp 并下载预训练模型。接着,展示了单张图片识别的最小化示例和详细实现,包括模型配置、图片预处理和结果输出。进阶功能部分介绍了多语言和竖排文本识别的实现方法。此外,文章还提供了 WinForms 图形界面开发的完整示例,展示了如何通过界面加载图片、执行识别并展示结果。最后,探讨了批量处理优化策略,如并行处理多张图片以提高性能。通过这些步骤,开发者可以

墨夶的博客 1004

poj2449 Remmarguts' Date K短路 A*

K短路裸题。 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> using namespace std; struct Edge{ int too, nxt, val; }edge[100005]; struct Odge{ ...

dianjiaxian1205的博客 151

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

poj 2449 Remmarguts' Date(K短路,A*算法)

http://poj.org/problem?id=2449 大致题意:给出一个有向图,求从起点到终点的第K短路。 K短路A*算法讲解: #include #include #include #include #include #include #include #include #include #include #define LL long

1648

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Poj2449 Remmarguts' Date 【A*搜索】K短路

http://poj.org/problem?id=2449 A*搜索求K短路。 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <s...

bantengbang8949的博客 118

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ2449 Remmarguts' Date K短路模板 【A* + dijkstra】

一、内容 题意:给定一个有向图,求S起点到T终点的第K短路 二、思路 首先反向建图,从T点建立到各点的边,求出T终点到各点的最短距离最为估价函数,用f数组保存。 bfs将fd = 距离 + 估价值入队,每次从估价值最少的点出队,若这个点等于T点且已经被遍历过K次那么直接输出答案。 由于是求第K短路,所以当一个点被遍历了K次那么久不用再入队了,因为它只会对k+1条路有用。 由于起点和终点可能相同,...

Tizzi的博客 908

POJ 2449 Remmarguts' Date【A*算法 + 第K短路】

传送门 Description "Good man never makes girls wait or breaks an appointment!" said the mandarin duck father. Softly touching his little ducks' head, he told them a story. "Prince Remmarguts lives in ...

qq_42211531的博客 309

POJ 2449 Remmarguts' Date A*算法求第k短路

http://poj.org/problem?id=2449 Description “Good man never makes girls wait or breaks an appointment!” said the mandarin duck father. Softly touching his little ducks’ head, he told them a story. “Pri...

xiji333的博客 212

poj2449 Remmarguts' Date(K短路:A*算法)

题目链接:点击打开链接 题意描述:给定一张图,求从点s出发到点t的第k短路? 解题思路:A*算法 首先预处理使用Dijkstra求出从图中任意一点到点t的最短路径,然后使用A*算法求解即可 A*算法中g为从出发点s到当前所走过的实际距离,h为从当前点到目标点t的最短距离,每次我们扩展g+h最小的点即可 思考:本题我是用剪枝:记录一个maxdis表示第k短路的一个上界,使用

Crazy_Bear 562

Remmarguts' Date poj2449 k短路 A*

Description给定n个点m条边起点st终点ed求k短路Solution嗯本蒟蒻第一题a*,还是很鸡冻的简单说来,每个节点包含估价函数f(i)=g(i)+h(i)f(i)=g(i)+h(i),其中在这题里g是到起点的距离,h是到终点的距离,是可以预处理出来的先把边反向求任意点到终点的距离作为h的值,每次从堆顶取点然后更新相邻的点,当第k次更新终点ed时就找到了k短路好神奇啊stl的队列会re而

olahiuj的博客 411

POJ 2449 Remmarguts' Date [A*算法 K短路]

题目POJ 2449 Remmarguts’ Date A*算法 K短路

yoer77的博客 1481

POJ 2449 Remmarguts' Date ( 第 k 短路 && A*算法 )

题意 : 给出一个有向图、求起点 s 到终点 t 的第 k 短路、不存在则输出 -1 #include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; const int INF = 0x3f...

154

poj2449 Remmarguts' Date 第K短路(A*算法)

求从s点到e点的第k条最短路。这里是最短路的典型变形之一:A*算法。A*算法是一种启发式搜索,不是纯粹的盲目搜索。A*算法中有个估值算法g(n),对于每个点而言,都有一个g(n)和h(n)来确定的f(n),实际上就是以f(n)为参考权值来确定搜索的方向,在这里,h(n)表示的是从s点出发到这个点n现在走过的路径长度,而g(n)表示的是从n到e的最短长度的大小,那么就确定了搜索的优先性,这里的A*算...

skykone1的博客 194

[poj2449]Remmarguts' Date(K短路模板题,A*算法)

解题关键:k短路模板题,A*算法解决。 #include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> #include<cmath> #include<queue> usin...

weixin_30404405的博客 88

POJ 2449 Remmarguts' Date (求第K短路,A* + Dijkstra)

“Good man never makes girls wait or breaks an appointment!” said the mandarin duck father. Softly touching his little ducks’ head, he told them a story. “Prince Remmarguts lives in his kingdom UDF – Un

henuzxy 377
上一篇: uva707 - Robbery 记忆化搜索
下一篇: hdu4521 小明系列问题——小明序列 线段树 间隔大于d的最长上升子序列
小小小小葱
博客等级 码龄14年 22粉丝 266原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值