描述

东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试。正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险。在出发之前,他搜集了国内外有关神秘丛林探险的资料,并绘制成一张地图:该地图上有若干安全点(包括入口点和出口点),并将这些安全点编号为1、2、…、n;如果一个安全点和另一个安全点有一条路直接相通,则用一条边标示;该图是一个连通图(任意两点间有至少一条路径),地图上每条路的长度和走这条路需要耗费的体力都做了标示。

KK行走速度为1,并知道自己体力为K。他想知道根据自己的体力情况能否成功地穿过丛林。

格式

输入格式

第一行两个整数n(<=5000) m(<=40000),分别表示地图上安全点的个数和边的数目;
第2行至第m+1 行每行4个整数x y c d,x、y表示有直接相联边的两个点的编号,c走这条路需要耗费的体力;d表示边的长度;(其中150<=c,d<=300)
第m+2行两个整数s t,分别表示安全的入口点和出口点的编号;
第m+3行一个整数k,表示BB的体力值;(K<10^9)
同一行上的多个数据用空格隔开。

输出格式

一个整数,如果BB能安全地从如入口穿过丛林到达出口,输出最短时间,否则输出-1

输入:

4 5
1 2 2 3
1 3 3 5
1 4 7 10
2 4 4 6
3 4 2 6
1 4
5

输出

11

最短路,多加一个限制条件。

#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int MAXN=;
const int INF=0x3f3f3f3f;
struct Node{
int v,dist,w;
int pow;
Node(){}
Node(int v,int dist,int w)
{
this->v=v;
this->dist=dist;
this->w=w;
}
};
vector<Node> mp[MAXN];
int n,m;
int d[MAXN],vis[MAXN];
int pow[MAXN];//表示到达该点后还剩多少能量
int power;
void spfa(int s)
{
for(int i=;i<=n;i++)
{
d[i]=INF;
vis[i]=;
} queue<int> que;
que.push(s);
vis[s]=;
d[s]=;
pow[s]=power;
while(!que.empty())
{
int now=que.front();que.pop();
vis[now]=;
for(int i=;i<mp[now].size();i++)
{
Node e=mp[now][i];
if(d[e.v]>d[now]+e.dist&&pow[now]>=e.w)
{
d[e.v]=d[now]+e.dist;
pow[e.v]=pow[now]-e.w;
if(!vis[e.v])
{
que.push(e.v);
vis[e.v]=;
}
}
}
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<m;i++)
{
int u,v,dist,w;
scanf("%d%d%d%d",&u,&v,&w,&dist);
mp[u].push_back(Node(v,dist,w));
mp[v].push_back(Node(u,dist,w));
}
int st,gl;
scanf("%d%d",&st,&gl);
scanf("%d",&power);
spfa(st);
if(d[gl]==INF)
printf("-1\n");
else
printf("%d\n",d[gl]); return ;
}
#include <cstdio>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
const int MAXN = ;
const int INF = 0x7f7f7f7f;
struct Edge{
int to, w, dist;
Edge(){}
Edge(int to, int w, int dist)
{
this->to = to;
this->w = w;
this->dist = dist;
}
};
struct Node{
int u, cost;
Node(){}
Node(int u, int cost)
{
this->u = u;
this->cost = cost;
}
};
int n, m;
vector<Edge> mp[MAXN];
int d[MAXN], vis[MAXN];
int start, goal,power;
void spfa()
{
for (int i = ; i <= n; i++)
{
d[i] = INF;
vis[i] = ;
}
queue<Node> que;
que.push(Node(start,));
vis[start] = ;
d[start] = ;
while (!que.empty())
{
Node now = que.front(); que.pop();
int u = now.u;
vis[u] = ;
for (int i = ; i < mp[u].size(); i++)
{
Edge e = mp[u][i];
if (now.cost + e.w <= power&&d[e.to]>e.dist + d[u])
{
d[e.to] = e.dist + d[u];
if (!vis[e.to])
{
vis[e.to] = ;
que.push(Node(e.to,now.cost+e.w));
}
}
}
}
if (d[goal] != INF)
cout << d[goal];
else
cout << -;
}
int main()
{
// freopen("C:\\Users\\11624\\Desktop\\input.in","r", stdin);
// freopen("C:\\Users\\11624\\Desktop\\output.out","w",stdout);
cin >> n >> m;
for (int i = ; i < m; i++)
{
int u, v, w, dist;
cin >> u >> v >> w >> dist;
mp[u].push_back(Edge(v, w, dist));
mp[v].push_back(Edge(u, w, dist));
}
cin >> start >> goal >> power;
spfa();
// fclose(stdin);
// fclose(stdout);
return ;
}

VIJOS:P1082丛林探险的更多相关文章

  1. P1082丛林探险

    P1082丛林探险 描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险. ...

  2. vijos1082丛林探险

    P1082丛林探险 描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险. ...

  3. Vijos——T 1082 丛林探险

    https://vijos.org/p/1082 描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,B ...

  4. POJ 2431 Expedition(探险)

    POJ 2431 Expedition(探险) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] A group of co ...

  5. vijos 1082

    描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险.在出发之前,他搜集了 ...

  6. 【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险

    http://www.lydsy.com/JudgeOnline/problem.php?id=2541 https://vijos.org/p/1366 loli秘制大爆搜_(:з」∠)_坑了好久啊 ...

  7. 【最短路】【spfa】小vijos P1447 Updown

    小vijos P1447 Updown 背景 开启了升降梯的动力之后,探险队员们进入了升降梯运行的那条竖直的隧道,映入眼帘的是一条直通塔顶的轨道.一辆停在轨道底部的电梯.和电梯内一杆控制电梯升降的巨大 ...

  8. 【BZOJ 1061】【Vijos 1825】【NOI 2008】志愿者招募

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 https://vijos.org/p/1825 直接上姜爷论文... #include< ...

  9. vijos P1915 解方程 加强版

    背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已 ...

随机推荐

  1. 设置mysql隔离级别

    1.查看当前会话隔离级别 select @@tx_isolation; 2.查看系统当前隔离级别 select @@global.tx_isolation; 3.设置当前会话隔离级别 set sess ...

  2. jquery 获取 outerHtml

    在开发过程中,jQuery.html() 是获取当前节点下的html代码,并不包括当前节点本身的代码,然后我们有时候确须要.找遍jQuery api文档也没有不论什么方法能够拿到. 看到有的人通过pa ...

  3. linux 跟踪工具

    strace工具,进程诊断.排错.跟踪系统调用和信号量 每行输出都是一个系统调用,包括函数和返回值. strace是Linux环境下的一款程序调试工具,用来监察一个应用程序所使用的系统调用及它所接收的 ...

  4. Tomcat安装与IDEA中的配置

    下载Tomcat 先从http://tomcat.apache.org/上下载tomcat9,根据你的系统版本来下载. 本地安装 下载之后解压到你的软件安装目录中,这是我的例子: 然后设置环境变量,如 ...

  5. A、B两伙马贼意外地在一片沙漠中发现了一处金矿,双方都想独占金矿,但各自的实力都不足以吞下对方,经过谈判后,双方同意用一个公平的方式来处理这片金矿。处理的规则如下:他们把整个金矿分成n段,由A、B开始轮流从最左端或最右端占据一段,直到分完为止。 马贼A想提前知道他们能分到多少金子,因此请你帮忙计算他们最后各自拥有多少金子?(两伙马贼均会采取对己方有利的策略)

    第一种做法:这种方法,算法复杂性大,重复的递归 #include "stdafx.h" #include<iostream> #include<vector> ...

  6. 06 php 单例模式

    一:单例模式的三大原则 (1)构造函数需要标记为非public(防止外部使用new操作符创建对象),单例类不能在其他类中实例化,只能被自身实例化. (2)拥有一个保存类的实例的静态成员变量$_inst ...

  7. 深入理解JVM:JVM执行时数据区域分类

    JVM在运行java程序的过程中会把他所管理的内存划分为若干个不同的数据区域. 这些区域都有各自的用途和创建.销毁时间.有些区域随着虚拟机的启动而存在.有些区域则依赖用户线程的启动和结束而建立和销毁. ...

  8. 【剑指Offer学习】【面试题58:二叉树的下一个结点】

    题目:给定一棵二叉树和当中的一个结点.怎样找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,另一个指向父节点的指针. 解题思路 假设一个结点有右子树.那么它的下一个结点就 ...

  9. python 基础 2.1 if 流程控制(一)

    一.if  else 1.if 语句     if expression:   //注意if后有冒号,必须有        statement(s)     //相对于if缩进4个空格 注:pytho ...

  10. php如何在原来的时间上加一天?一小时?

    <?php echo "今天:",date('Y-m-d H:i:s'),"<br>"; echo "明天:",date( ...