题目

【问题描述】

  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的来回路径),我们可以在这个环上走很多次才开始继续走,为什么这样可以达到压缩的目的呢,一个是比较数字化的等下直接从方程看待,另一个就是因为之前说过了到达的方式有很多种,说不定这就是一种,而且可能性很大!。
设这个环的大小为mod,则T=t+k*mod,当k=0的时候,一定不影响结果,所以可以这么操作。
压缩后d[i][j]表示在j时刻到达i点已经走过了的最小时间,这里的值%mod一定为j,比如mod=5,d[i][2]=12,就表示第一次走到i时间是2+k*mod的时候是12(k=2),因此接下来17、22、27…都可以通过不停地走那个环来达到。
最后来看答案d[n-1][t%mod],如果它的答案是t,说明刚好可以走到,如果是t-k*mod,那么就走几个环,所以只要d[n-1][t%mod]<=t就可以达到
至于方程的转移,实际上就是最短路问题,用SPFA,化简之处如例子:用一个状态就表达了17、22、27…能化简得少么?

代码

注意:出于个人习惯,代码中所有的点的标号都被+1

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL inf=1e18+5;
const int maxn=55,maxm=105,maxw=10000*2+5;
struct edge
{int to,next,w;
}E[maxm<<1];
int Case,mod;
int n,m,np,first[maxn];
LL t;
LL d[maxn][maxw];
void add(int u,int v,int w)
{E[++np]=(edge){v,first[u],w};first[u]=np;
}
void Init()
{scanf("%d%d",&n,&m);cin>>t;mod=1e9;np=0;memset(first,0,sizeof(first));int u1,u2,w;for(int i=1;i<=m;i++){scanf("%d%d%d",&u1,&u2,&w);u1++,u2++;if(u1==1||u2==1){mod=min(mod,2*w);}add(u1,u2,w);add(u2,u1,w);}
}
struct data
{int i,k;
};
bool inq[maxn][maxw];
void SPFA()
{queue<data>q;for(int i=0;i<=n;i++)for(int j=0;j<=mod;j++)d[i][j]=inf;q.push((data){1,0});d[1][0]=0;while(!q.empty()){data i=q.front();q.pop();inq[i.i][i.k]=0;for(int p=first[i.i];p;p=E[p].next){int j=E[p].to,nk=(i.k+E[p].w)%mod;if(d[j][nk]>d[i.i][i.k]+E[p].w){d[j][nk]=d[i.i][i.k]+E[p].w;if(inq[j][nk])continue;inq[j][nk]=1;q.push((data){j,nk});}}}
}
void solve()
{if(mod==1e9){printf("Impossible\n");return;}SPFA();if(d[n][t%mod]<=t)printf("Possible\n");elseprintf("Impossible\n");
}
int main()
{//freopen("in.txt","r",stdin);scanf("%d",&Case);while(Case--){Init();solve();}return 0;
}

收获

压缩问题可以从冲突上分析究竟获得了多少化简,同样的也可以通过冲突来得到压缩算法

长途旅行(压缩问题)相关推荐

  1. c++回到起点旅行商问题_不要犯同样的错,提C型房车回渝上牌长途旅行的心路历程...

    视频版看这里➡️ 第一次驾驶三吨重房车到成功在村道脱险,这段旅程值得回顾 我们俩房车旅行近两年,为了更好的迎接新一年的到来,我们来简单回顾一下这一年多的房车旅程. 我们俩的旅行口号是:奔跑的影视工作室 ...

  2. 为实现电动车长途旅行,特斯拉超级充电站将大幅升级

    现在的特斯拉超级充电站功率都为120千瓦,升级后将达到350千瓦. 近日,特斯拉CEO埃隆·马斯克在Twitter上回复网友问题时表示,未来特斯拉超级充电站将不仅配备太阳能面板,还会在第三代超级充电站 ...

  3. 为长途旅行提供免费WiFi服务是不是一桩靠谱的生意

    坐火车终于也能用上免费WiFi了.这个月,上海铁路局普速列车WiFi服务宣布全面开通,乘客搭乘上海局所属列车,只要打开手机连上移动WiFi,就可以免费上网.看电影......既可以上外网与全世界互联, ...

  4. 【长途旅行必备】行李箱中的迷你实用小物件(转)

    走越远的地方,带越少的行李,这是长途旅行者的座右铭. 但是,不管你的旅行箱多么小,带上这些小物件都会给你长长的旅途带来很多的便利. 行李箱中的迷你实用小物件: 1.旅行睡袋 如果你有小小的洁癖,一定要 ...

  5. 长途旅行出行准备清单

    核对出行准备清单: 1.遮阳伞.草帽.太阳镜.防晒霜 2.毛巾.牙刷.水乳液洗面奶面膜.花露水.(创可贴.口罩). 眼罩/U型枕.万能头巾.多备几个塑料袋.纸巾 3.换洗衣5套,睡衣.注意早晚温差,备 ...

  6. sum and plan | 要温和有力量地长途旅行~

    最近在一堆DDL和一群羊中夹缝求生.坐在回家的车上,那就小写这姗姗来迟的年末summary和年初plan~ 纷纷扰扰的2022在"低气压"的12月里进入尾声.年末"盘库存 ...

  7. 开车旅行 travel

    题目描述 JY J Y JY是一个爱旅游的探险家,也是一名强迫症患者.现在 JY J Y JY想要在 C C C国进行一次长途旅行,C国拥有n个城市(编号为0,1,2...,n−1" rol ...

  8. 旅行 jzoj 1281

    Description 今天又是个神圣的日子,因为LHX教主又要进行一段长途旅行.但是教主毕竟是教主,他喜欢走自己的路,让别人目瞪口呆.为什么呢,因为这条路线高低不平,而且是相当的严重. 但是教主有自 ...

  9. 一辆适合长途出行的电动跑车 奥迪RS e-tron GT正式上市

    作为奥迪品牌电动化发展的先锋力作,奥迪RS e-tron GT不止是前瞻科技的呈现,在e-tron纯电技术的加持下,更传递着RS的情怀,承载着人们对GT豪华休旅生活的向往. 2022年12月30日,伴 ...

最新文章

  1. 可旋转的2K显示器,写代码逼格要到位,免费包邮送到家
  2. 异常检测概念、异常检测的思路、孤立森林Isolation Forest、​​​​​​​局部异常因子LOF、OneClassSVM、EllipticEnvelop
  3. 【Java】全站编码过滤器GenericEncodingFilter代码与配置
  4. 基于ESP32的竞赛裁判系统功能调试-光电条检测板
  5. activity堆栈式管理
  6. GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决
  7. [心得]Ubuntu無法ssh登入
  8. OpenCV提取显示一张图片(或者视频)的R,G,B颜色分量
  9. Enterprise Library 2.0 Hands On Lab 翻译(2):数据访问程序块(二)
  10. 基于OpenGL的贪吃蛇游戏设计与实现
  11. 3d max morpher教程
  12. 修复ie浏览器主页被360篡改
  13. 李广难封--有感于团队建设
  14. div3 C. Dominant Piranha
  15. 计算机类绘图的文献,绘图计算机论文,关于机械制图计算机绘图的有效融合相关参考文献资料-免费论文范文...
  16. 阿里云服务器怎么样?详细介绍
  17. 用css编写一个简单的旋转魔方
  18. 移动硬盘插到电脑上忽然不显示的解决办法(不一定有用,仅我个人的解决方法)
  19. java制作SM2证书
  20. 巴基斯坦圣诞节期间“毒酒”致42人死亡

热门文章

  1. 2021年计算机保研-假211真双非三无的失败保研经历(武大/复旦/计算所/华科/同济/上交)
  2. zblog php1.51,zblogphp1.5.1 function文件夹文件详细说明
  3. Arduino+光敏传感器
  4. linux 内核 mpath rr,linux – 对dm设备100%利用率的影响
  5. 爱情智慧:1招让你搞定不愿意付出的男人
  6. 如何在C++中将Word格式转换为PDF?Aspose.Words快速解决
  7. qt结合opencv videocapture图像采集
  8. Revit软件建模 柱、墙、梁、板任意顶部对齐操作
  9. 音频剪辑软件QLab Pro for Mac
  10. SAP之FPM卷五:FPM开发实例-完成主页面功能(1)