Travel

article/2025/10/8 13:21:08

Description

  给出一个有 个顶点 条边的有向图,对于一条边长度为len的边有两种走法。
  1、如果a和b可以互达,则走过这条边的时间为len
  2、如果a和b不可以互达,则走过这条边的时间为2*len
  现在给出一个k,问,从顶点1到顶点n,满足第二种走法不超过k次的最短时间是多少。

Input

  第一行有3个整数n,m,k(1<=n<=100,1<=m<=10000,0<=k<=10),表示有n个顶点,m条边。
  接下来有m行,每行有3个整数xi,yi,leni(1<=xi,yi<=n,1<=leni<=10000),表示长度为leni的有向边。
  注意,两个点可能有多条边连接。

Output

  一行一个整数,表示最短时间。
  如果没有满足题目条件的路径,则输出-1

Sample Input

7 7 3

1 2 2

1 3 2

2 4 3

4 7 5

3 5 4

5 6 1

6 4 2

Sample Output

20

题目解释

这道题我在做的时候被坑了一下,就是在:
这里写图片描述
这段描述上,我理解成了如果a可以到b,那么长度为len,而如果在这时b不可以到a,那么可以使长度为2*len后,也可以通过。
而实际上,题目的意思是有n个点,m条有向边,其中任意两个点a,b,它们间的距离分别为 lena lenb ,如果a可以到b,b也可以到a,那么它们之间的距离不变,但如果a可以到b,b却不可以到a,那么a到b的距离为 2lena ,反之相同。
那么在走这种不可互达的边小于等于k次时,最少的距离是多少?

题解

先用Floyd求出点与点之间的最短路,再用分层SPFA求出走不可互达边的最小距离。
因为对于这种算法我也很难再多加解释,所以不理解的还是看下面吧。


varx,y,s,n,m,k,i,j,o,ans:longint;a,b:array[0..1000,0..1000] of longint;f:array[1..1000,0..100] of longint;d:array[1..1000,1..2] of longint;bz:array[1..1000,0..100] of boolean;
procedure spfa;
varl,r,i,j,k,o:longint;
beginfillchar(d,sizeof(d),0);fillchar(bz,sizeof(bz),false);fillchar(f,sizeof(f),$7f div 3);f[1,0]:=0;bz[1,0]:=true;d[1,1]:=1;d[1,2]:=0;l:=1;r:=1;while l<=r dobegink:=d[l,1];j:=d[l,2];for i:=1 to n do if a[k,i]<>a[0,0] thenbeginif b[i,k]=1 then o:=0 else o:=1;if f[i,j+o]>a[k,i]+f[k,j] thenbeginf[i,j+o]:=a[k,i]+f[k,j];if not bz[i,j+o] thenbegininc(r);d[r,1]:=i;d[r,2]:=j+o;bz[i,j+o]:=true;end;end;end;bz[k,j]:=false;inc(l);end;
end;
beginreadln(n,m,k);fillchar(a,sizeof(a),$7f div 3);for i:=1 to n dofor j:=1 to n do b[i,j]:=2;for i:=1 to m dobeginreadln(x,y,s);b[x,y]:=1;if a[x,y]>s then a[x,y]:=s;end;for i:=1 to n dofor j:=1 to n dofor o:=1 to n doif (j<>o) and (i<>o) and (i<>j) thenif (b[i,o]=1) and (b[o,j]=1) then b[i,j]:=1;for i:=1 to n dofor j:=1 to n doif a[i,j]<>a[0,0] then a[i,j]:=a[i,j]*b[j,i];spfa;ans:=a[0,0];for i:=0 to k do if ans>f[n,i] then ans:=f[n,i];if ans=a[0,0] then writeln(-1) else writeln(ans);
end.

http://chatgpt.dhexx.cn/article/KDDvZmk0.shtml

相关文章

Don't forget your original intention.

生活不止眼前的苟且 妈妈坐在门前 哼着花儿与少年 虽事隔多年 记得她泪水涟涟 那些幽暗的时光 那些坚持与慌张 在临别的门前 妈妈望着我说 生活不止眼前的苟且&#xff0c;还有诗和远方的田野&#xff0c; 你赤手空拳来到人世间&#xff0c;为找到那片海不顾一切。 她…

I tell you 如何下载文件

地址&#xff1a;https://msdn.itellyou.cn/ I tell you 可以下载一些office&#xff0c;windows系统等&#xff0c;还是十分方便的。 如何下载&#xff08;可以使用迅雷或者百度网盘等&#xff09; 展开详细信息 —— 复制框中的链接——打开迅雷 直接下载就好了。

please tell me who you are?

GIT 中提示 please tell me who you are 如果使用git过程中出现了&#xff0c;please tell me who you are &#xff0c; 需要设置一下使用者的身份。 1.git config user.name "username" 2.git config user.email "usernameXXX.com"

*** Please tell me who you are.

Xcode6在创建工程后&#xff1a; *** Please tell me who you are. Run git config --global user.email "youexample.com" git config --global user.name "Your Name" to set your accounts default identity. Omit --global to set the identity only…

Telephone Lines

Description Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone company is uncooperative, so he needs to pay for some of the cables required to connect his farm to the phone system. There are N (1 ≤ N ≤ 1,000) forlorn tel…

i tell you 微软各种 操作系统 应用程序 开发工具 下载

I tell you 提供微软系各种操作系统&#xff08;win7、xp、win10&#xff09;、应用程序&#xff08;office、project、visio等&#xff09;、开发人员工具&#xff08;visual C、visual basic、visual studio等&#xff09;、服务器系统、设计人员工具等软件的下载。可以说几乎…

常用的红色的RGB值

每一种颜色都有自己的风格&#xff0c;相信点进这篇文章的你一定喜欢设计&#xff0c;希望能对您有所帮助 请点击此处输入图片描述 请点击此处输入图片描述 请点击此处输入图片描述 请点击此处输入图片描述 请点击此处输入图片描述 转自[叫我楼下小黑]

常用RGB色值表

常用RGB色值表 浅粉红 #FFB6C1 255,182,193 粉红 #FFC0CB 255,192,203 猩红/深红 #DC143C 220,20,60 淡紫红 #FFF0F5 255,240,245 弱紫罗兰红 #DB7093 219,112,147 热情的粉红 #FF69B4 255,105,180 深粉红 #FF1493 255,20,147 中紫罗兰红 #C71585 199,21,133 兰花紫 #DA70D6 21…

渐变色表RGB值

渐变色表RGB值 //色表构建vector<unsigned char> R { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,240, 220, 200, 180, 160, 140, 120, 100, 80, 60, 40, 20, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…

RGB颜色表

常用颜色&#xff1a; 白色&#xff1a;rgb(255,255,255) 黑色&#xff1a;rgb(0,0,0) 红色&#xff1a;rgb(255,0,0) 绿色&#xff1a;rgb(0,255,0) 蓝色&#xff1a;rgb(0,0,255) 青色&#xff1a;rgb(0,255,255) 紫色&#xff1a;rgb(255,0,255) 颜色大全https://tool.osch…

玫瑰花的制作(代码+RGB)

玫瑰花 最近在自己的文件夹中发现了一个小程序,打开之后发现不得了,程序的内容居然是一朵用代码和RGB调色,再利用数学公式制作的玫瑰花,效果十分惊艳。 下面直接上图: 图片貌似贴的有点大了(匿:)) 但是!!!(敲黑板!!!)没错,这就是一朵用代码画出来的玫瑰花!可…

RGB颜色与十六进制颜色码

十六进制颜色码 RGB与十六进制颜色对照图 RGB与十六进制颜色对照表 英文代码形像颜色十六进制&#xff08;HEX&#xff09;格式RGB格式LightPink浅粉色#FFB6C1255,182,193Pink粉红#FFC0CB255,192,203Crimson猩红#DC143C220,20,60LavenderBlush偏红的淡紫色#FFF0F5255,240,245P…

RGB颜色

RGB色彩模式是工业界的一种颜色标准&#xff0c;是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的&#xff0c;RGB即是代表红、绿、蓝三个通道的颜色&#xff0c;这个标准几乎包括了人类视力所能感知的所有颜色&#xff0c;是运用最…

【有利可图网】PS实战教程:PS制作岩石金属镶嵌质感立体文字

本教程主要使用形状工具、 3D工具、材质以及光线设置来制作&#xff0c;完成的效果比较真实&#xff0c;大家可以跟着教程一步一步的来。 大理石/玫瑰金组合是流行的极简主义趋势之一&#xff0c;几乎无处不在&#xff0c;从家居装饰到文具&#xff0c;炊具等。本教程将向您展示…

如何挑选机械键盘?高性价比的机械键盘推荐

本文首发于知乎:如何挑选机械键盘?高性价比的机械键盘推荐 又到了一年一度的618购物节了,想要买一把机械键盘(给自己、送男友、送礼物)的读者看过来啦。 本文将介绍以下内容: 一、如何选择适合自己的机械轴 二、如何选择自己喜欢的键帽? 三、其他的参考因素 四、高性价…

Java中调用方法的几种方式

一般的&#xff0c;在Java语言中&#xff0c;调用方法有三种方式。 第一种&#xff1a;通过对象名.方法名进行调用&#xff0c;这是最普通的也是最常见的一种调用方式。 第二种&#xff1a;通过new关键字调用构造方法&#xff0c;这种是在实例化对象时使用的方式。 第三种&…

JAVA 方法定义及调用

1、方法 方法是实现某个功能的一组语句&#xff0c;通常将常用的功能写成一个方法&#xff08;类中的方法&#xff09;。 方法能实现代码的模块化重用。 方法相当于函数&#xff0c;类似于加工厂。参数原材料&#xff1b;方法体加工&#xff1b;返回值&#xff08;return&am…

Java方法之间的调用

Java方法之间的调用 1. 静态方法1.1 静态方法调用静态方法1.2 静态方法调用非静态方法 2. 非静态方法2.1 非静态方法调用静态方法2.2 非静态方法调用非静态方法 1. 静态方法 1.1 静态方法调用静态方法 package com.wang03.test;public class Test{public static void main(St…

java方法,方法调用机制

方法使用 public class Target1{public static void main(String[] args) {//方法使用Person jia new Person();jia.speak();//调用方法jia.cal01();jia.cal02(5);//给n一个5&#xff1b;jia.cal02(10);int returnRes jia.getSum(1,2);System.out.println("getSum方法返…