07-图6 旅游规划 (25分)(以此感谢zyx佬)

news/2024/7/2 23:58:20

这个题的话算是模板题改编了一点吧,不过个人感觉这个改编很有助于你理解迪杰斯特拉这个算法的真谛。
题解:新开一个cost数组来记录花费,仍然是用了优先队列优化的一个思想,与模板题不同的是只需要加一句话(感谢zyx佬发现问题

cost[temp.id]=min(cost[temp.id],temp.w);

这里提可以供一组数据来告诉你为什么要加这句话
不加这句话输出2 3显然不对

3 3 1 3
1 2 2 2
1 3 2 2
2 3 0 1
#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  600
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 1000007;
using namespace std;
struct wazxy{int v,w,len;wazxy(int x,int a,int b){v=x,w=a,len=b;}
};vector <vector<wazxy> > edge;
int n,m,s,e;
bool visited[maxn];
int dis[maxn],cost[maxn];struct node{int id,dis,w;node(int a,int b,int c){id=a,dis=b,w=c;}bool operator < (const node & a)const{return dis>a.dis;}
};
void dij(){memset(dis,MaxN,sizeof(dis));memset(cost,0,sizeof(cost));memset(visited,false,sizeof(visited));dis[s]=0,cost[s]=0;priority_queue<node> q;q.push(node(s,0,0));while(!q.empty()){node temp=q.top();q.pop();if(visited[temp.id]) continue;visited[temp.id]=true;cost[temp.id]=min(cost[temp.id],temp.w);for(int i=0;i<edge[temp.id].size();i++){wazxy node1=edge[temp.id][i];if(visited[node1.v]) continue;if(dis[node1.v]>=temp.dis+node1.len){dis[node1.v]=temp.dis+node1.len;cost[node1.v]=temp.w+node1.w;q.push(node(node1.v,dis[node1.v],cost[node1.v]));}}}
}int main()
{edge.resize(maxn);cin>>n>>m>>s>>e;for(int i=0;i<m;i++){int x,y,a,b;scanf("%d%d%d%d",&x,&y,&a,&b);edge[x].push_back(wazxy(y,b,a));edge[y].push_back(wazxy(x,b,a));}dij();cout<<dis[e]<<" "<<cost[e]<<endl;return 0;
}

http://lihuaxi.xjx100.cn/news/285930.html

相关文章

百度Apollo 3.5是如何设计Cyber RT计算框架的?

自百度Apollo自动驾驶平台开源以来&#xff0c;已快速迭代至 3.5 版本&#xff0c;代码行数超过 39 万行&#xff0c;合作伙伴超过 130 家&#xff0c;吸引了来自 97 个国家的超 15000 名开发者。无疑&#xff0c;Apollo 是目前世界范围内最活跃的自动驾驶开放平台之一。最新发…

有没有必要把机器学习算法自己实现一遍?

编辑&#xff1a;机器学习算法与自然语言处理-忆臻&#xff0c;Charlotte数据挖掘-小杜https://www.zhihu.com/question/36768514作者&#xff1a;微调https://www.zhihu.com/question/36768514/answer/376510114不少自学的朋友很容易陷入到焦虑当中&#xff0c;尤其是在学习理…

Chapter 3、Java语法基础(二)----Java基本数据类型、变量与常量 (20th,Feb)

基本数据类型 1、整数类型 整数类型用来储存整数数值&#xff0c;即没有小数部分的数值&#xff0c;可以使正数、负数&#xff0c;也可以是零。根据所占内存的大小不同&#xff0c;分为byte、short、int、long 4种类型。 Byte型 整型中所分配内存空间最少的&#xff0c;只分配1…

后缀数组 + Hash + 二分 or Hash + 二分 + 双指针 求 LCP ---- 2017icpc 青岛 J Suffix (假题!!)

题目链接 题目大意&#xff1a; 就是给你n个串每个串取一个后缀,要求把串拼起来要求字典序最小&#xff01;&#xff01; sum_length_of_n≤5e5sum\_length\_of\_n\leq 5e5sum_length_of_n≤5e5 MY Slove : 首先我们知道对于最后一个串肯定是取最小后缀的 那么我们可以把最后…

第2关:实现一个链接存储的栈

#if !defined(LINKED_STACK_H_985552) #define LINKED_STACK_H_985552 typedef int T; //数据元素类型 struct LNode {T data;LNode* next; };struct LinkStack {LNode* top; // 栈顶指针int len; // 栈的长度 };LinkStack* LS_Create(); void LS_Free(LinkStack* ls); void LS…

最常用 150 个Linux命令汇总(建议收藏)

点击上方[视学算法]→右上角[...]→[设为星标⭐]来源&#xff1a;banana 童www.cnblogs.com/bananaaa/p/7774467.htmllinux 命令是对 Linux 系统进行管理的命令。对于 Linux 系统来说&#xff0c;无论是中央处理器、内存、磁盘驱动器、键盘、鼠标&#xff0c;还是用户等都是文件…

牛客小白月赛25 补题+题解[A-J]

加油加油加油&#xff01; 文章目录A.AOE还是单体&#xff1f;B.k-size字符串C.白魔法师D.抽卡E.点击消除F.疯狂的自我检索者G.解方程H.神奇的字母&#xff08;二&#xff09;I.十字爆破J.异或和之和A.AOE还是单体&#xff1f; 思路&#xff1a;这题数据范围2e5&#xff0c;如…

Python | 一万多条拼车数据,看春运的迁徙图

作者 | 白苏&#xff0c;医疗健康领域产品经理一枚&#xff0c;Python&R爱好者来源 | InThirty编辑 | Jane今天是腊月二十八&#xff0c;你们都到家了吗&#xff1f;这篇文章&#xff0c;作者对北京、上海、广州、深圳、杭州等地 1万多条出行数据进行分析&#xff0c;得出了…