题目描述:

一个国家有N个城市,这些城市被标为0,1,2,...N-1。这些城市间连有M条道路,每条道路连接两个不同的城市,且道路都是双向的。一个小鹿喜欢在城市间沿着道路自由的穿梭,初始时小鹿在城市0处,它最终的目的地是城市N-1处。小鹿每在一个城市,它会选择一条道路,并沿着这条路一直走到另一个城市,然后再重复上述过程。每条道路会花费小鹿不同的时间走完,在城市中小鹿不花时间逗留。路程中,小鹿可以经过一条路多次也可以经过一个城市多次。给定城市间道路的信息,问小鹿是否有一种走法,从城市0出发到达城市N-1时,恰好一共花费T个单位的时间。如果存在输出“Possible”,否则输出“Impossible”。

注意,小鹿在整个过程中可以多次经过城市N-1,只要最终小鹿停在城市N-1即可。

例如样例中小鹿的行程可以是0->1->2->0->2.

解题报告:

用时:1h30min,1TLE

这题首先要明白,到终点至少要经过一条n的出边,所以如果可行,一定是将某一条出边走很多次,然后再到达终点,即 \(2*w+j==T\),所以只要 \(j=T\mod2*w\) 存在即可,所以我们枚举每一条出边,然后跑spfa ,看 \(f[n][j]\) 是否存在即可,我们定义 \(f[i][j]\) 表示到达了\(i\)这个点 走过的距离\(s \mod2*w\)为\(j\)的最小时间,因为要保证到达n后时间\(\leq T\),所以我们要使得\(f[n][j]\)尽量小,做spfa即可

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#define RG register
#define il inline
#define iter iterator
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
using namespace std;
typedef long long ll;
const int N=55,M=1000005;
int q[M][2],mod=M,n,m,head[N],to[N<<1],dis[N<<1],nxt[N<<1],num=0,mo;
ll TT,f[N][20005];bool vis[N][20005];
void link(int x,int y,int z){
nxt[++num]=head[x];to[num]=y;dis[num]=z;head[x]=num;
}
void spfa(){
int x,u,disp,t=0,sum=1,now;q[sum][0]=1;q[1][1]=0;
memset(vis,0,sizeof(vis));vis[1][0]=true;
memset(f,127/3,sizeof(f));f[1][0]=0;
while(t!=sum){
t++;if(t==mod)t=0;x=q[t][0];now=q[t][1];
if(f[n][TT%mo]<=TT)return ;
for(int i=head[x];i;i=nxt[i]){
u=to[i];
disp=(now+dis[i])%mo;
if(f[x][now]+dis[i]<f[u][disp]){
f[u][disp]=f[x][now]+dis[i];
if(!vis[u][disp]){
vis[u][disp]=true;sum++;if(sum==mod)sum=0;
q[sum][0]=u;q[sum][1]=disp;
}
}
vis[x][now]=false;
}
}
}
void Clear(){
memset(head,0,sizeof(head));num=0;
}
void work()
{
Clear();
int x,y,z;
cin>>n>>m>>TT;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
x++;y++;link(x,y,z);link(y,x,z);
}
for(int i=head[n];i;i=nxt[i]){
mo=dis[i]<<1;
spfa();
if(f[n][TT%mo]<=TT){
puts("Possible");
return ;
}
}
puts("Impossible");
} int main()
{
int T;cin>>T;
while(T--)work();
return 0;
}

51Nod 1326 遥远的旅途的更多相关文章

  1. 【51Nod】-1326 遥远的旅途

    Description 一个国家有 N 个城市, 这些城市被标为 0,1,2,...N-1. 这些城市间连有 M 条道路, 每条 道路连接两个不同的城市, 且道路都是双向的. 一个小鹿喜欢在城市间沿着 ...

  2. 51nod 1326 奇妙的spfa+dp

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1326 1326 遥远的旅途 题目来源: TopCoder 基准时间限制: ...

  3. 51nod1326 遥远的旅途(spfa+dp)

    题意: 给出一个无向图,问从1到n是否存在一条长度为L的路径. n,m<=50,1<=路径长度<=10000,L<=10^18 思路: 改变一下思路,我们发现,假设从起点1走到 ...

  4. ACM-图论-同余最短路

    https://www.cnblogs.com/31415926535x/p/11692422.html 一种没见过的处理模型,,记录一下,,主要是用来处理一个多元一次方程的解的数量的问题,,数据量小 ...

  5. 51nod 1273 旅行计划——思维题

    某个国家有N个城市,编号0 至 N-1,他们之间用N - 1条道路连接,道路是双向行驶的,沿着道路你可以到达任何一个城市.你有一个旅行计划,这个计划是从编号K的城市出发,每天到达一个你没有去过的城市, ...

  6. [多校联考2019(Round 4 T2)][51nod 1288]汽油补给(ST表+单调栈)

    [51nod 1288]汽油补给(ST表+单调栈) 题面 有(N+1)个城市,0是起点N是终点,开车从0 -> 1 - > 2...... -> N,车每走1个单位距离消耗1个单位的 ...

  7. seL4之hello-2旅途(完成更新)

    seL4之hello-2旅途 2016/11/19 13:15:38 If you like my blog, please buy me a cup of coffee. 回顾上周 seL4运行环境 ...

  8. HDOJ 1326. Box of Bricks 纯水题

    Box of Bricks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  9. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

随机推荐

  1. vue 的模板编译—ast(抽象语法树) 详解与实现

    首先AST是什么? 在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言 ...

  2. 坑爹了多少年的html元素垂直居中问题

    原文章:https://www.w3cplus.com/css3/a-guide-to-flexbox.html 如果你的元素有固定高度的话 父元素用display: flex;height:100p ...

  3. JS 转换数据类型

    JavaScript 是一种动态数据类型语言,变量是没有类型的,可以随机赋予任意值,若变量要转换数据类型,有两种办法:隐式转换和显式转换. 隐式转换可转换为字符串(将一个值加上字符串) 数字(在值的前 ...

  4. STM32读取温湿度传感器DHT11和DHT21(AM2301)系列问题

    1.DHT11和DHT21传感器 这两种传感器都是奥松公司的产品,具体的传感器说明书在其官网上有(www.aosong.com). DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 ...

  5. sublime使用攻略

    一些常用的快捷键 Ctrl+Enter 在下一行插入新行.举个例子:即使光标不在行尾,也能快速向下插入一行. Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Ctrl+Shift ...

  6. Spring源码阅读-spring启动

    web.xml web.xml中的spring容器配置 <listener> <listener-class>org.springframework.web.context.C ...

  7. dubbo debug过程中一个有趣的问题

    最近在debug dubbo代码过程中遇到的很有趣的问题 我们都知道dubbo ReferenceBean是消费者的spring bean包装,为了查一个consumer端的问题,在Reference ...

  8. SpringCloud的微服务网关:zuul(实践)

    Zuul的主要功能是路由和过滤器.路由功能是微服务的一部分,比如/api/user映射到user服务,/api/shop映射到shop服务.zuul实现了负载均衡. zuul有以下功能: Authen ...

  9. 高级控件 popwindow 与gridview的组合应用

    Gridview 的布局设置 <GridView android:layout_width="wrap_content" android:layout_height=&quo ...

  10. 基于session认证 相亲小作业

    基于session认证  相亲小作业 用户登录 如果男用户登录,显示女生列表 如果女用户登录,显示男生列表 urls ===========================urls========== ...