博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
|Vijos|图论最短路|P1082 丛林冒险
阅读量:5157 次
发布时间:2019-06-13

本文共 1154 字,大约阅读时间需要 3 分钟。

http://vijos.org/p/1082

非常有代表性的题目,在SPFA时多加一个判断即可

此题用SPFA有反例,正解搜索,此题解是错误的 (2016.11.27更改)

此问题可解所有体力+权值的最短路问题

#include
#include
#include
#include
#include
#define ms(i,j) memset(i, j, sizeof(i));using namespace std;struct node{ int u; int v; int p; int t; node(int u1,int v1, int p1,int t1) : u(u1),v(v1),p(p1),t(t1) {}};const int maxn = 5000 + 2, maxm = 40000 + 2;vector
a[maxm];int dis[maxn];int ex[maxn];int p[maxn];int n,m,s,t,k;queue
q;int main () { scanf("%d%d", &n, &m); for (int i=1;i<=m;i++) { int x,y,c,d; scanf("%d%d%d%d", &x,&y,&c,&d); a[x].push_back(node(x,y,c,d)); a[y].push_back(node(y,x,c,d)); } scanf("%d%d%d", &s, &t, &k); //SPFA p[s] = k; ms(ex,false); ex[s]=true; ms(dis,27); dis[s]=0; dis[t]=100000000; q.push(s); while(!q.empty()) { int u = q.front();q.pop();ex[u]=false; for (int i=0;i
dis[u]+pn.t&&p[u]>=pn.p) { dis[pn.v]=dis[u]+pn.t; p[pn.v] = p[u]-pn.p; if (!ex[pn.v]) { ex[pn.v] = true; q.push(pn.v); } } } } printf("%d\n", (dis[t]==100000000) ? -1 : dis[t]); return 0;}

转载于:https://www.cnblogs.com/flyinthesky1/p/6384335.html

你可能感兴趣的文章
MySQL check the manual that corresponds to your MySQL server version for the right syntax错误
查看>>
[学习总结]6、Android异步消息处理机制完全解析,带你从源码的角度彻底理解
查看>>
java内部类实现多继承
查看>>
python thread 多线程
查看>>
锁类型_ sys.dm_os_wait_stats
查看>>
AR2220 通过cpu-defend policy处理大量大量arp广播的小技巧
查看>>
android-studio于java相关
查看>>
Spring常用注解
查看>>
shell 倒引号
查看>>
伯仲叔季
查看>>
PHP——0128练习相关2——js点击button按钮跳转到另一个新页面
查看>>
ThreadLocal 解决多线程程序的并发问题+事务处理
查看>>
Codeforces Round #459 (Div. 2)题解
查看>>
Git中如何利用生成SSH个人公钥访问git仓库
查看>>
POJ 3280 Cheapest Palindrome(DP)
查看>>
【leetcode 简单】 第八十四题 两个数组的交集
查看>>
High ASCII字符从bat文件到dos控制台的转化问题
查看>>
Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
查看>>
反应堆模式最牛的那篇论文--由solidmango执笔翻译
查看>>
洛谷2661 信息传递 三倍经验?
查看>>