1087 All Roads Lead to Rome(最短路求最大权值,最短路路径条数,节点个数,回溯路径)

本文主要是介绍1087 All Roads Lead to Rome(最短路求最大权值,最短路路径条数,节点个数,回溯路径),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(这题基本上把最短路能求的都求了个遍,除了麻烦一点,难度其实还好) 

(卡题原因:dijks漏了对路径条数的初始化。)

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
string st,ed;
map<string,int>mp;
map<int,string>name;
map<int,int>w;
int e[210][210];
int indx=0;
int getID(string s){if(mp.count(s)){return mp[s];}name[indx]=s;mp[s]=indx++;return mp[s];
}
int dist[210];
int hap[210],num[210];
int sum[210];
int p[210];
bool vis[210];
void dijks(int u){memset(dist,0x3f,sizeof dist);memset(vis,0,sizeof vis);memset(p,-1,sizeof p);dist[u]=0;sum[u]=1;//记得每个都要初始化,漏了这个,结果debug半多小时for(int i=0;i<indx;i++){u=-1;int mi=INT_MAX;for(int j=0;j<indx;j++){if(!vis[j]&&mi>dist[j]){u=j;mi=dist[j];}}if(u==-1)break;vis[u]=1;for(int j=0;j<indx;j++){if(!vis[j]){if(dist[j]==dist[u]+e[u][j]){sum[j]=sum[u]+sum[j];if(hap[j]==hap[u]+w[j]){if(num[j]>num[u]+1){p[j]=u;num[j]=num[u]+1;}}else if(hap[j]<hap[u]+w[j]){p[j]=u;hap[j]=hap[u]+w[j];num[j]=num[u]+1;}}else if(dist[j]>dist[u]+e[u][j]){sum[j]=sum[u];p[j]=u;dist[j]=dist[u]+e[u][j];hap[j]=hap[u]+w[j];num[j]=num[u]+1;}}}}u=getID(ed);cout<<sum[u]<<' '<<dist[u]<<' '<<hap[u]<<' '<<(hap[u])/num[u]<<endl;
}
int flag=0;
void dfs(int u){if(u==-1)return ;dfs(p[u]);if(flag)cout<<"->";cout<<name[u];flag=1;
}
signed main(){cin>>n>>k>>st;memset(e,0x3f,sizeof e);ed="ROM";getID(st);getID(ed);for(int i=0;i<n-1;i++){string city;cin>>city;int d;cin>>d;w[getID(city)]=d;// cout<<getID(city)<<' ';}w[getID(st)]=0;for(int i=0;i<k;i++){string c1,c2;cin>>c1>>c2;int a,b,d;cin>>d;a=getID(c1);b=getID(c2);e[a][b]=e[b][a]=d;}dijks(getID(st));dfs(getID(ed));
}

这篇关于1087 All Roads Lead to Rome(最短路求最大权值,最短路路径条数,节点个数,回溯路径)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/430435

相关文章

Linux修改pip和conda缓存路径的几种方法

《Linux修改pip和conda缓存路径的几种方法》在Python生态中,pip和conda是两种常见的软件包管理工具,它们在安装、更新和卸载软件包时都会使用缓存来提高效率,适当地修改它们的缓存路径... 目录一、pip 和 conda 的缓存机制1. pip 的缓存机制默认缓存路径2. conda 的缓

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Python中Windows和macOS文件路径格式不一致的解决方法

《Python中Windows和macOS文件路径格式不一致的解决方法》在Python中,Windows和macOS的文件路径字符串格式不一致主要体现在路径分隔符上,这种差异可能导致跨平台代码在处理文... 目录方法 1:使用 os.path 模块方法 2:使用 pathlib 模块(推荐)方法 3:统一使

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

MySQL9.0默认路径安装下重置root密码

《MySQL9.0默认路径安装下重置root密码》本文主要介绍了MySQL9.0默认路径安装下重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录问题描述环境描述解决方法正常模式下修改密码报错原因问题描述mysqlChina编程采用默认安装路径,

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

spoj705( 求不相同的子串个数)

题意:求串s的不同子串的个数 解题思路:任何子串都是某个后缀的前缀,对n个后缀排序,求某个后缀的前缀的个数,减去height[i](第i个后缀与第i-1 个后缀有相同的height[i]个前缀)。 代码如下: #include<iostream>#include<algorithm>#include<stdio.h>#include<math.h>#include<cstrin