PAT1003 Emergency (25)

2023-05-16

引论

      本以为这是一道水题却因为考虑不周WA了半天,参考了博客https://blog.csdn.net/tiantangrenjian/article/details/19434417,感觉这题还是蛮不错的

题目链接

https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376

题目大意

      给定一个无向图,求两点之间有几条最短路径,同时每个的都有一个权值,要求求出在最短路径的情况下权值最大为多少

分析

      虽然加了个附加条件但总体来看还是单源最短路径问题,而且节点的范围非常小只有500,所以先跑一下dijstra,在松弛的时候加上对节点权值的处理,这样我们就能得到最后最大的权值;跑完dijstra后,各个节点到源节点的长度确定,这时从目标节点往源节点跑一遍DFS,只要满足G[u][v] + d[u] = d[v]我们就使该点处的条数加上dfs(u),初始化源节点的条数为1,这样dfs(t)就是我们求的最短路径的条数

我的误区

      在刚开始的时候我没有写dfs只是设了一个cnt计数,遍历所有节点,当节点i不等于目标节点v且d[i] + G[i][v] = d[v]时,cnt++;这种做法的盲点在于使用这种方法只可以甄别出有几个从节点到目标节点长度相等,但是从其他节点到这个中间节点可能也有几条不同的路径,所以这种方法根本就没有办法找全所有的路径,下面给出一组样例
4 5 0 3
1 4 1 2
0 1 1
0 2 2
0 3 4
1 2 1
2 3 2
该样例的图形如下
这里写图片描述
(此图片及样例转自https://blog.csdn.net/tiantangrenjian/article/details/19434417)

参考代码

此代码仅供参考,希望大家独立实现算法,将此程序当做对拍程序使用

//题目https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376
#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

#define N 550
#define INF 0x3f3f3f3f

int n, m, s, t;
int vis[N], cost[N], d[N], sum[N], dp[N];
int G[N][N];

void dijstra() {
    memset(vis, 0, sizeof(vis));
    memset(d, INF, sizeof(d));
    d[s] = 0;
    while (1) {
        int v = -1;

        for (int i = 0; i < n; ++i) {
            if (vis[i]) continue;
            if (v == -1 || d[v] > d[i] ) {
                v = i;
            }
        }

        if (v == -1) break;
        vis[v] = 1;

        for (int i = 0; i < n; ++i) {
            if (i == v) continue;
            if (d[i] > d[v] + G[i][v]) {
                d[i] = d[v] + G[i][v];
                sum[i] = sum[v] + cost[i];
            } else if (d[i] == d[v] + G[i][v]) {
                if (sum[i] < sum[v] + cost[i]) {
                    sum[i] = sum[v] + cost[i];
                }
            }
        }

    }
}

int dfs(int t) {
    int &ans = dp[t];
    if (ans) return ans;

    for (int i = 0; i < n; ++i) {
        if (d[i] + G[i][t] == d[t]) {
            ans += dfs(i);
        }
    }

    return ans;

}

int main() {
    scanf("%d%d%d%d", &n, &m, &s, &t);
    memset(G, INF, sizeof(G));
    for (int i = 0; i < n; ++i) {
        scanf("%d", &cost[i]);
        sum[i] = cost[i];
    }
    for (int i = 0; i < m; ++i) {
        int u, v, c;
        scanf("%d%d%d", &u, &v, &c);
        G[u][v] = G[v][u] = min(c, G[u][v]);
    }
    dijstra();

    memset(dp, 0, sizeof(dp)); dp[s] = 1;
    printf("%d %d\n", dfs(t), sum[t]);
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PAT1003 Emergency (25) 的相关文章

  • B - fLIP

    题目链接 xff1a http code festival 2017 quala contest atcoder jp tasks code festival 2017 quala b 解题思路 xff1a 一个棋盘有N行 xff0c M列
  • 无根树转有根数

    include lt stdio h gt include lt vector gt include lt queue gt using namespace std const int maxn 61 1000 43 10 vector l
  • 【VC ++ 2010】 C语言 计算机二级编译器 Visual C ++ 2010 Express(中文学习版)的安装与使用

    文章目录 1 安装包地址2 安装2 1 安装VC 43 43 20102 2 打开VC 43 43 20102 3 注册 3 使用3 1 新建项目3 2 打开项目3 3 编写C文件并运行 1 安装包地址 链接 xff1a https pan
  • 怎样解题表

    怎样解题表是由美国数学家G 波利特提出的 具体的介绍见 xff1a https baike baidu com item E6 80 8E E6 A0 B7 E8 A7 A3 E9 A2 98 551528 fr 61 aladdin 怎样
  • C++中的::运算符

    原文出处 xff1a http blog csdn net libing zeng article details 54412935 一两行以上的成员函数最好被定义在类体之外 这要求一个特殊的声明语化来标识一 个函数是一个类的成员 xff1
  • C++创建类并应用

    新建一个Point h文件 在该文件中定义Point类 xff0c 代码如下 ifndef POINT H define POINT H class Point public Point void setPoint int x int y
  • UVA808(对蜂窝建立坐标系)

    这个题我是通过建立坐标系加找规律做出来的 xff0c 个人感觉难点是建立坐标系 xff0c 所以我将着重讲一下坐标系是怎么建立的 建立坐标系 xff1a 如果你有兴趣的话 xff0c 你可以将他给的图沿横线延长 xff0c 这样一个正六边形
  • Cats and Fish2017北京赛区网络同步赛

    题目链接 xff1a http hihocoder com problemset problem 1631 首先根据吃鱼的速度从小到大排序 xff0c 然后从1到x按着时间轴枚举猫的行为 xff0c 如果是吃完一条判断一下他的状态是正在吃鱼
  • leetcode729. My Calendar I

    设一个字典记录所有被预定的页面 xff0c 然后就是判断区间相交了 当发生以下两种情况之一时认为区间相交 1 起点小于左端点且终点大于左端点 2 起点大于等于左端点且起点小于右端点 代码如下 span class hljs class sp
  • 搭建java web开发环境(eclipse)

    引论 工欲善其事 xff0c 必先利其器 xff1b 想要进行web开发就必须有一款顺手的武器 xff0c eclipse作为一款知名的IDE自然是一个不错的选择 准备 eclipse依赖于JDK xff0c 所以我们在安装eclipse之
  • 安装codeblocks(win10)

    下载 进入http www codeblocks org downloads 26 xff0c 选择与你电脑对应的codeblocks版本 xff0c 这里以win10为例 xff0c 下载windows平台的codeblocks 注意要选
  • B - Palindrome-phobia(CODE FESTIVAL 2017 Final)

    题目链接 https cf17 final open contest atcoder jp tasks cf17 final b 解题思路 通过找规律发现出现的次数最多的字符与其他两个字符数量的差不能大于1 AC代码 include lt
  • poj1061青蛙的约会

    题目链接 http poj org problem id 61 1061 题目类型 扩展欧几里得算法 解题思路 设青蛙A为速度快的那只 xff0c 则有 m n t k l 61 y x 令a 61 m n b 61 l c 61 y c则
  • Android Studio中安装Kotlin插件

    http blog csdn net cto 1649900265 article details 72628878 这个链接内介绍了安装Kotlin插件的步骤 步骤 xff1a 在Android Studio中打开Settings xff
  • 骰子的游戏(牛客练习赛7)

    题目链接 https www nowcoder com acm contest 38 A 解题方法 枚举 AC代码 include lt stdio h gt const int maxn 61 10 43 5 int a maxn b m
  • C - Shopping Street(AtCoder Beginner Contest 080)

    题目链接 https beta atcoder jp contests abc080 tasks abc080 c 解题方法 因为一共只有十个时期所以我们可以枚举所有的状态 xff0c 又因为必须有1个时期开放 xff0c 所以我们从1而不
  • 经典OJ推荐

    转载自http acdream info topic tid 61 101 一 Online Judge简介 Online Judge系统 xff08 简称OJ xff09 是一个在线的判题系统 用户可以在线提交程序多种程序 xff08 如

随机推荐

  • 安装Tomcat(win10)

    引论 做web项目已经是一个很常见的事情了 xff0c 而我们完成后的web项目要想发布除了硬件的服务器外还需要相应的服务器软件 xff0c 而Tomcat就是一款web应用服务器 尽管因为Nginx xff08 它的性能是Apache服务
  • org.hibernate.InstantiationException: No default constructor for entity: cn.gov.entity.Book

    出错地方 xff1a org hibernate InstantiationException No default constructor for entity cn gov entity Book 出错原因 xff1a hibernat
  • 牛客练习赛8 D加边的无向图

    题目链接 https www nowcoder com acm contest 39 D 解题思路 利用并查集查找一共有几个独立的集合 xff0c 最后需要的最少边为集合个数减一 AC代码 include lt stdio h gt inc
  • 解决getHibernateTemplate().save ()不能将数据保存到数据库的问题

    原文出自http blog csdn net justerdu article details 50893583 分析 xff1a 数据是保存在缓存中而未提交到数据库中 解决办法 xff1a 在hibernate cfg xml里面加入 h
  • 输入ctrl s终端冻结怎么办

    原文出自http www xshellcn com zhishi sr ztd html 大家有没有发现每当输入ctrl s 就暂停该终端 让人着急万分 xff0c 我相信这是很多xshell的用户都会遇到的一个问题 xff0c 那应该怎么
  • java大数详解

    引论 在算法竞赛中我们经常遇到大数问题 xff0c 例如求一个很大的斐波那契数 住在这种情况下我们用常规解法 xff08 使用long long或long long int xff09 肯定是不行的 xff0c 而我们自己写一个大数的算法又
  • ACM数论模板及应用

    引论 数论是算法竞赛的宠儿 xff0c 几乎每个算法竞赛 xff08 不论是ACM的省赛 区域赛还是牛客网上的网络赛 xff09 都会出一道关于数论的题 这很容易理解 xff0c 因为算法与数学的关系极其密切 xff0c 也可以说算法拼到最
  • 深度神经网络的应用

    深度学习能应用在哪些领域 xff1f 深度学习的快速发展 xff0c 不仅使机器学习得到许多实际的应用 xff0c 还拓展了整个AI xff08 人工智能的 xff09 的范围 它将任务进行拆解 xff0c 使得各种类型的机器辅助变成可能
  • <操作系统>读者写者问题(写者优先)C语言实现

    问题描述 代码 span class token macro property span class token directive keyword include span span class token string lt stdio
  • 二叉树的节点个数以及高度详解(附图解)

    二叉树的节点个数以及高度 文章目录 二叉树的节点个数以及高度前言NO 1 定义链式二叉树NO 2 创建二叉树一 二叉树节点个数1 代码展示2 递归图解 二 二叉树叶子节点个数1 代码展示2 递归图解 三 二叉树第k层节点个数1 代码展示2
  • 使用Github Desktop轻松进行版本管理

    引论 现在git已经成为了主流的版本管理软件 xff0c 然而是不是有一些一看到命令行就头痛的初学者 xff08 比如我 xff09 呢 xff1f 不过好在有着各种各样的图形界面软件可以帮助我们摆脱这一烦恼 xff0c 就比如说githu
  • Leetcode 100. Same Tree

    分析 这道题算是一道关于树的简单题 xff0c 我们需要判断给出的两棵树是否相等 xff0c 分为三步 xff0c 判断当前节点是否相等 xff0c 判断左右子树是否相等 要特别注意一下为NULL的情况 我的代码 span class hl
  • Python小程序之文件清理机

    背景 作为一名Acmer我写了很多 cpp文件 xff0c 其中经过编译 链接后又生成了许多 exe和 o文件 当我用github desktop将他们同步到我的github上是 exe和 o文件很碍事 xff0c 尤其是 exe文件占用的
  • hdu1076

    题目链接 An Easy Task 解题思路 题目要求给出一个年份Y和一个整数N xff0c 输入从Y年起第N个闰年 首先我们容易知道我们需要判断一个年份是否是闰年 xff0c 我们可以把它封装成一个函数 xff0c 这样可以方便我们下次调
  • 牛客练习赛12 B迷宫解题报告

    一切尽在代码中 include lt stdio h gt include lt string h gt include lt queue gt include lt algorithm gt using namespace std con
  • 利用并查集维护两个对立集合

    在并查集的实际应用中 xff0c 我们经常遇到下列这种情况的题目 当满足 1 x xff0c y为不同集合的元素 2 x xff0c z为不同集合元素 时 xff0c y xff0c z为相同集合的元素 如何来描述这种不同集合元素的关系就是
  • HDU - 3018解题报告

    题意简述 给出n个节点 xff0c m条边 xff0c 问要想全部经过这m条边且每个边只经过一次至少需要多少条路径 分析 这个题实际上就是一笔画问题中的定理二 xff1a 如果连通无向图 G 有 2k 个奇顶点 xff0c 那么它可以用 k
  • 手把手教你申请企鹅号

    引论 随着互联网时代的兴起 xff0c 自媒体越来越引人注目 笔者周围已经有了不少人开始做自媒体而且还做的顺风顺水 笔者也有些按捺不住 xff0c 寻思着要做自媒体的生意 xff0c 可是转念一想 xff0c 独赚钱不如众赚钱 xff0c
  • UVA818解题报告

    span class hljs comment UVA 818 理解了题意和水题差不多 条件 xff1a 一些可能相同的无向边 要求 xff1a 构建一个满足如下三个要求的图 一 不能有环 二 连成一条直线 三 所有节点要连在一起 操作 x
  • PAT1003 Emergency (25)

    引论 本以为这是一道水题却因为考虑不周WA了半天 xff0c 参考了博客https blog csdn net tiantangrenjian article details 19434417 感觉这题还是蛮不错的 题目链接 https p