长途旅行(压缩问题)

本文介绍了JY在C国的长途旅行问题,他希望恰好花费T小时从城市0到达城市n-1。问题转化为判断是否可能在不停留的情况下完成旅行。通过分析,提出使用SPFA算法解决,并利用重叠子问题的思路进行时间压缩。代码实现中需要注意点的标号调整。最终检查d[n-1][t%mod]是否小于等于t来确定是否可能完成旅行。
摘要由CSDN通过智能技术生成

题目

【问题描述】

  JY是一个爱旅游的探险家,也是一名强迫症患者。
  现在JY想要在C国进行一次长途旅行,C国拥有n个城市(编号为0,1,2…,n - 1),城市之间有m条道路,可能某个城市到自己有一条道路,也有可能两个城市之间有多条道路,通过每条道路都要花费一些时间。JY从0号城市开始出发,目的地为n–1号城市。由于JY想要好好参观一下C国,所以JY想要旅行恰好T小时。为了让自己的旅行更有意思,JY决定不在任何一个时刻停留(走一条到城市自己的路并不算停留)。
  JY想知道是否能够花恰好T小时到达n–1号城市(每个城市可经过多次)。现在这个问题交给了你。若可以恰好到达输出“Possible”否则输出“Impossible”。(不含引号)。

【输入格式】  

  第一行一个正整数Case,表示数据组数。
  每组数据第一行3个整数,分别为n, m, T。
  接下来m行,每行3个整数x, y, z,代表城市x和城市y之间有一条耗时为z的双向边。

【输出格式】  

  对于每组数据输出”Possible”或者”Impossible”。

【输入样例】  

2
3 3 11
0 2 7
0 1 6
1 2 5
2 1 10000
1 0 1

【输出样例】  

Possible Impossible

【样例解释】  

第1组:0 -> 1 -> 2 :11 第2组:显然偶数时间都是不可能的。

【数据范围】  

30%的数据满足:T≤10000
另有30%的数据满足:2≤n≤5 1≤m≤100
100%的数据满足: 2≤n≤50 1≤m≤100 1≤z≤10000 1≤T≤10^18
       1≤Case≤5
      

分析

看了网上很多题解,并不是很明白,然后下定决心自己搞懂之后,决定写一个仍旧不是很明白的题解,重要的是自己思考。

作为一个图论问题,首先要自己想一下自己会什么,比较明显的是这不是欧拉回路或者说网络流,那么就只有SPFA了 (什么逻辑啊!!)
T比较大,所以说我们要想办法压缩,利用一个dp的思想—重叠子问题,意思是说第j时刻到达i点可能很很多种到达方式,如果我们能不总是重复计算,只需要到达了一次就不再计算

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值