题意:
给出一个无向图,问从1到n是否存在一条长度为L的路径。
n,m<=50,1<=路径长度<=10000,L<=10^18

思路:
改变一下思路,我们发现,假设从起点1走到终点N有一条路径的长度为a,假设它再往一条与终点相连的长为b的路径反复走无数次后使得路径长度到达了T,那么一定有(T-a)%(2*k)==0**T%(2*k)=a%(2*k),所以我们只需要看是否从1到N存在一条路径长度为d,使得d%(2*k)=t%(2*k)
因为这个题目和模数有关,所以我们要把取摸的结果写入状态.
dp[i][j]表示处于i节点,从一号点到i号点的花费和%(2*k)(选择的边权)等与k的最小花费.
那么转移就是: dp[to][(j+quan)%mod]=min(dp[now][j]+quan)
因为具有后效性,所以需要spfa.

 //这道题较多的参考了晚上的解法,在看懂之后自己又写了一遍
//链接:https://blog.csdn.net/qq_33229466/article/details/77131289
#include<cstdio>
#include<queue>
#include<string.h>
using namespace std;
typedef long long LL; const int maxn = + , maxm = 2e4 + ;
int n, m, num, head[maxn];
LL t, dp[maxn][maxm], inf = ;
bool vis[maxn][maxm]; struct node {
int to, w, next;
}edge[maxn * ];
queue<pair<int, int>>q; void add_edge(int u, int v, int w)
{
edge[++num].to = v;
edge[num].w = w;
edge[num].next = head[u];
head[u] = num;
} void spfa(int mod)
{
q.push(make_pair(,)); vis[][] = ;
while (!q.empty())
{
pair<int,int> u = q.front(); q.pop();
int x = u.first, y = u.second;
for (int i = head[x]; i; i = edge[i].next)
if (dp[x][y] + edge[i].w < dp[edge[i].to][(y + edge[i].w) % mod])
{
int nx = edge[i].to, ny = (y + edge[i].w) % mod;
dp[nx][ny] = dp[x][y] + edge[i].w;
if (!vis[nx][ny]) {
q.push(make_pair(nx, ny));
vis[nx][ny] = ;
}
}
vis[x][y] = ;
}
} int main()
{
int kase;
scanf("%d", &kase);
while (kase--)
{
memset(head, , sizeof(head));
scanf("%d%d%lld", &n, &m, &t);
num = ;
for (int i = ; i <= m; i++)
{
int x, y, w;
scanf("%d%d%d", &x, &y, &w);
add_edge(x, y, w);
add_edge(y, x, w);
}
int flag = ;
for (int i = ; i <= num; i += )
if (edge[i].to == || edge[i + ].to == )
{
int w = edge[i].w * ;
for (int j = ; j <= n; j++) {
for (int k = ; k < w; k++) {
dp[j][k] = inf;
}
}
dp[][] = ;
spfa(w);
if (dp[n][t%w] <= t)
{
printf("Yes\n");
flag = ;
break;
}
}
if (!flag) printf("No\n");
}
return ;
}

51nod1326 遥远的旅途(spfa+dp)的更多相关文章

  1. 51nod 1326 奇妙的spfa+dp

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

  2. 【BZOJ1003】1003: [ZJOI2006]物流运输trans SPFA+DP

    Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...

  3. HDU 3499 Flight spfa+dp

    Flight Time Limit : 20000/10000ms (Java/Other)   Memory Limit : 65535/65535K (Java/Other) Total Subm ...

  4. BZOJ 1003 [ZJOI2006]物流运输trans SPFA+DP

    题意:链接 方法:SPFA+DP 解析:挺好的题目.因为数据范围较小所以用这样的方式能够搞,只是也是挺不好想的. 我们定义cost(i,j)表示从第i天走到第j天运用同一种方式的最小花费,然后因为数据 ...

  5. BZOJ2763 [JLOI2011]飞行路线(SPFA + DP)

    题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=2763 Description Alice和Bob现在要乘飞机旅行,他们选择了一家 ...

  6. BZOJ 1003 物流运输 题解 【SPFA+DP】

    BZOJ 1003 物流运输 题解 Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的 ...

  7. HDU 4433 locker(SPFA+DP)

    题目链接 去年区域赛的题目,早就看过题目了,又是过了好久了... 这题状态转移,一看就知道应该是 线性的那种,不过细节真的不好处理,一直没想出怎么搞,期间也看过题解,好像没太看懂... dp[i][j ...

  8. BZOJ-1003 物流运输trans SPFA+DP

    傻逼错误耗我1h,没给全范围坑我1A.... 1003: [ZJOI2006]物流运输trans Time Limit: 10 Sec Memory Limit: 162 MB Submit: 529 ...

  9. [ZJOI2006]物流运输 SPFA+DP

    题目描述 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格的管理和跟踪. ...

随机推荐

  1. H3C router cmd

    LAN转WAN:接口下port link-mode route windows CMD,本地连接5的链路本地地址经常有一个百分号加一个数字,该数字即接口索引,fe80::8c79:e4f9:f5a3: ...

  2. Ubuntu14.04安装tomcat-9.0.1的教程

    系统环境:Ubuntu14.04 Tomcat安装版本:Apache tomcat 9.0.1 下载地址:http://tomcat.apache.org/download-90.cgi 安装包:ap ...

  3. [jQuery]顶级对象$(二)

    $ 是 jQuery 的缩写 <script> # 方法1. $ 是jQuery的别称 弹出提示 $(function () { alert(11) ); # 方法2 jQuery(fun ...

  4. NIO学习笔记,从Linux IO演化模型到Netty—— 究竟如何理解同步、异步、阻塞、非阻塞

    我的观点 首先,分开各自理解. 1. 同步:描述两个(或者多个)个体之间的协调关系. 比如,单线程中,methodA调用了methodB,methodB返回后,methodA才往下执行,那么称A同步调 ...

  5. c++ 有符号int和无符号int做加减乘除问题

    c++ 有符号int和无符号int做加算术运算的问题: 一.运算过程先把有符号的补码数直接看成无符号数,在和无符号数进行算术运算 二.int和unsigned int类型进行混合算数运算时,运算结果为 ...

  6. scrapy的useragent与代理ip

    scrapy中的useragent与代理ip 方法一: user-agent我们可以直接在settings.py中更改,如下图,这样修改比较简单,但是并不推荐,更推荐的方法是修改使用scrapy的中间 ...

  7. c# 匿名方法(函数) 匿名委托 内置泛型委托 lamada

    匿名方法:通过匿名委托 .lamada表达式定义的函数具体操作并复制给委托类型: 匿名委托:委托的一种简单化声明方式通过delegate关键字声明: 内置泛型委托:系统已经内置的委托类型主要是不带返回 ...

  8. 获取Data和Log默认路径

    使用SERVERPROPERTY()来得到Data和Log的默认路径: InstanceDefaultDataPath和InstanceDefaultLogPath分别返回默认数据和日志目录. DEC ...

  9. redis 5.0.7 源码阅读——动态字符串sds

    redis中动态字符串sds相关的文件为:sds.h与sds.c 一.数据结构 redis中定义了自己的数据类型"sds",用于描述 char*,与一些数据结构 typedef c ...

  10. apue 外传

    先上目录 chapter 3 [apue] dup2的正确打开方式 chapter 10 [apue] 等待子进程的那些事儿 chapter 14 [apue] 使用文件记录锁无法实现父子进程交互执行 ...