[Usaco2009 Oct]Heat Wave 热浪

这篇具有很好参考价值的文章主要介绍了[Usaco2009 Oct]Heat Wave 热浪。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目描述

有一个 n个点 m 条边的无向图,请求出从 s 到 t 的最短路长度。


输入格式第一行四个正整数 n, m, s, t。 接下来 m 行,每行三个正整数 u, v, w,表示一条连接 u, v 长为 w 的边。

1≤n≤2500,1≤m≤6200,1≤w≤1000。


输出格式

输出一行一个整数,表示答案。


样例输入

Copy to Clipboard
7 11 5 4 
 2 4 2
 1 4 3
 7 2 2
 3 4 3
 5 7 5
 7 3 3
 6 1 1
 6 3 4
 2 4 3
 5 6 3
 7 2 1 

样例输出文章来源地址https://www.toymoban.com/news/detail-623535.html

Copy to Clipboard
7
/*
 * @Description: To iterate is human, to recurse divine.
 * @Autor: Recursion
 * @Date: 2022-03-02 11:52:08
 * @LastEditTime: 2022-03-24 12:07:32
 */
#include <bits/stdc++.h>
#define Inf 2147483647
using namespace std;
int head[(int)1e6+10],cnt;
int dis[(int)1e6+10],vis[(int)1e6+10];
int n,m,s;

void init()
{
    for(int i = 1;i <= n;i ++)
        dis[i] = Inf;
}

struct edge{
    int to;
    int weight;
    int next;//终点,边权,同起点的上一条边的编号
}edge[(int)1e6+10];

struct node{
    int w;
    int now;
    //重载运算符把最小的元素放在堆顶(大根堆)
    bool operator <(const node &x)const
    {
        return w > x.w;
    }
};

priority_queue<node>q;

void add(int u,int v,int w)
{
    edge[++cnt].to = v;
    edge[cnt].weight = w;
    edge[cnt].next = head[u];//存储该点的下一条边
    head[u] = cnt;//更新目前该点的最后一条边(就是这一条边)
}

void dijkstra()
{ 
    for(int i = 1;i <= n;i ++)
        dis[i] = Inf;
    dis[s] = 0;
    q.push((node){0,s}); 
    while(!q.empty()){
        //堆为空所以节点都更新
        node x = q.top();
        q.pop();
        int u = x.now;
        if(vis[u]) continue;
        vis[u] = 1;
        for(int i = head[u];i;i = edge[i].next){
            int v = edge[i].to;
            if(dis[v] > dis[u] + edge[i].weight){
                dis[v] = dis[u] + edge[i].weight;
                q.push((node){dis[v],v});
            }
        }
    }
}

int main()
{
    int t;
    cin >> n >> m >> s >> t;
    init();
    for(int i = 1;i <= m;i++)
    {
        int x,y,z;
        cin >> x >> y >> z;
        add(x,y,z);
        add(y,x,z);
    }
    //dijkstra();
    int pos = s;
    dis[pos] = 0;
    while(vis[pos] == 0){
        int minn = Inf;
        vis[pos] = 1;
        for(int i = head[pos];i!=0;i = edge[i].next){
            if(!vis[edge[i].to]&&(dis[edge[i].to] > dis[pos] + edge[i].weight))
                dis[edge[i].to] = dis[pos] + edge[i].weight;
        }
        for(int i = 1;i<=n;i++)
            if(dis[i] < minn&&vis[i] == 0){
                minn = dis[i];
                pos = i;
            }
    } 
    cout << dis[t] << endl;
    // for(int i = 1;i <= n;i ++)
    //     cout << dis[i] << " ";
}

到了这里,关于[Usaco2009 Oct]Heat Wave 热浪的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HOJ 系统常用功能介绍 OJ部署定制快速入门 c++ python Java编程在线自动评测判题 信息奥赛一本通 USACO G E S P 蓝桥 CSP NOIP 蓝桥等考题库 常见问题

    技术支持微  makytony   终身更新维护 功能类似洛谷和信息奥赛一本通,支持CSP复赛中的freopen文件输入输出方式提交,模拟真实考试环境,防止出现 本地  AC 比赛  WA  PA TLE  爆零 的惨剧。 组织比赛作业,创建题目、查看用户提交代码、下载评测数据等都没限制。 约  328

    2024年01月25日
    浏览(37)
  • OpenStack——编排(Heat)服务介绍与安装

    OpenStack Heat 是一个基于模板的编排服务,用于自动化部署和管理基础设施资源。它允许用户通过编写模板文件来描述所需的基础设施资源和配置,然后使用 Heat 引擎来解析和执行这些模板,自动创建、配置和管理云环境中的资源。 例如,假设我们有一个Web应用程序,它需要一

    2024年02月12日
    浏览(42)
  • 【算法】BF、KMP算法及OJ题

      大家好,好久不见,这里是平凡的人,众所周知,现在是暑假时期,趁现在时间比较充裕,博主将通过这篇博客具体介绍数据结构与算法中的BF、KMP算法, 记录自己的学习过程加上自己的理解,希望能够帮到更多的人了解学习BF、KMP算法。同时,如果存在错误的地方,还请

    2024年02月01日
    浏览(48)
  • 贪心算法OJ刷题(1)

    指所求问题的整体最优解可以通过一系列局部最优的选择来到达。是不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考

    2023年04月25日
    浏览(35)
  • 链表经典算法OJ题目

    直接在原链表里删除val元素,然后让val前一个结点和后一个节点连接起来。 这时我们就需要3个指针来遍历链表: pcur  —— 判断节点的val值是否于给定删除的val值相等 prev ——保存pcur的前一个节点,为删除节点后,连接pcur之后的节点做准备 del —— 保存pcur之后的一个节点

    2024年04月26日
    浏览(33)
  • 【算法训练笔记】栈的OJ题

           🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️林 子       🛰️博客专栏:✈️ 小林的算法训练笔记       🛰️社区 :✈️ 进步学堂       🛰️欢迎关注:👍点赞🙌收藏✍️留言 题目链接: 1047. 删除字符串中的所

    2024年02月09日
    浏览(42)
  • 动态规划算法OJ刷题(3)

    问题描述 给出一个字符串s,分割s使得分割出的每一个子串都是回文串。计算将字符串s分割成回文串的最小切割数。例如:给定字符串s=“aab”,返回1,因为回文分割结果[“aa”,“b”]是切割一次生成的。 解题思路 方法1:用一维数组来完成,O(N^3) 注意转移方程必须是让两个

    2024年02月14日
    浏览(37)
  • C++ OJ题测试—排序算法效率

      目录 OJ链接 一、直接插入排序 二、希尔排序 三、直接选择排序 常规:  第二种: 四、 堆排序 五、冒泡排序 六、快速排序 使用C++ sort函数 C语言思路: 三路划分优化效率 七、归并排序 八、计数排序 ​    ​ ​ ​  ​   ​ ​ sort 函数是C++标准库中提供的通用排序函数

    2024年02月04日
    浏览(46)
  • 【数据结构与算法】手撕链表OJ题

    给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 思路一 :一种比较普遍的方式,边遍历边找不同。我们可以通过定义两个指针,一个指向头节点,一个置为NULL。当遇到值为相同的时候,直接跳过去。指向下一位

    2024年02月10日
    浏览(40)
  • 【数据结构与算法】:10道链表经典OJ

    思路1:遍历原链表,将 val 所在的节点释放掉。(太麻烦) 思路2:创建新链表,再遍历原链表,找到不为 val 的节点尾插到新链表。 思路1代码实现如下: 注意: 1.当链表为空时,直接返回NULL即可。 2.当尾插上最后一个有效节点时,此时它的 next 可能还与最后一个节点相链接,

    2024年04月14日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包