热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ZOJ3946HighwayProject(有条件的最短路)

题目链接:http:acm.zju.edu.cnonlinejudgeshowProblem.do?problemCode3946题意:Marjar帝

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3946

题意:Marjar帝国的皇帝爱德华想要建造一些双向高速公路,以便尽可能快地从首都到达其他城市。 因此,他提出了高速公路项目。Marjar帝国有N个城市(包括首都),从0到N  -  1(首都是0)的索引,并且可以建造M条高速公路。 建设第i高速公路需要Ci美元。 在i-th高速公路上,Xi到Yi需要Di分钟。

爱德华希望找到一个建筑计划,从首都到达其他城市所需的总时间最短,即从首都到城市i所需的最短时间总和(1≤i≤N)。 在所有可行的计划中,爱德华想要以最低的成本选择计划。 请帮助他完成这项任务。

思路:这题是在路径最短的境况下选择最少的花费,所以需要在松弛的时候对花费进行更新操作,假如说三个点被线连着,第一个点也连着第三个点,因为dij对边进行松弛的时候,总是选择在dis数组里面离源点最近的而且没松弛过的,所以从最短路径来说,这个点肯定是最短路径里的点了,但是如果加了花费这个条件的话,所以当我们判断如果dis[1-3]==dis[1-2-3]的话,我们还要判断它们的花费需不需要更新。注意更新的时候花费不要累加,因为路只要修一遍。

#include
using namespace std;
#define pii pair
#define ll long long
const int N = 1e5+7;
vector E[N], Ep[N];
int vis[N], n, m;
ll d[N], p[N];
void init()
{memset(d, 0x3f, sizeof(d));memset(vis, 0, sizeof(vis));for(int i = 0; i }
void Dijkstra()
{priority_queue Q;Q.push({-d[0], 0});while(!Q.empty()){int now = Q.top().second;Q.pop();if(vis[now]) continue;vis[now] = 1;for(int i = 0; i d[now] + E[now][i].second){d[v] = d[now] + E[now][i].second;p[v] = Ep[now][i].second;Q.push({-d[v], v});}else if(d[v] == d[now] + E[now][i].second && p[v] > Ep[now][i].second)p[v] = Ep[now][i].second;}}
}
int main()
{int t;scanf("%d", &t);while(t--){init();scanf("%d%d", &n, &m);for(int i = 0; i }


 


推荐阅读
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文介绍了SPOJ2829题目的解法及优化方法。题目要求找出满足一定条件的数列,并对结果取模。文章详细解释了解题思路和算法实现,并提出了使用FMT优化的方法。最后,对于第三个限制条件,作者给出了处理方法。文章最后给出了代码实现。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
author-avatar
暗影HK4164286
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有