\(Description\)

某一天,少年邂逅了同病相连的IA。见面后,IA一把牵起少年的手,决定和他一起逃离部落,离开这个无法容身的是非之地。

要逃离部落,少年和IA就需要先选择一条耗时最少的路线,从而避免被部落的大人们抓到。部落可以大致分为N个区域,少年和IA在区域1,部落的出口设在区域N。此外部落还有M条连接两个区域道路。道路是无向的,没有一条道路的两端连接相同的区域,也没有两条道路所连接的两个区域完全相同。对于其中前(M−1)条道路,其通过时间是确定的,但最后一条道路,由于地理因素,通过其的时间会不断变化。

现在,少年和IA得知了在K个不同的时段里,通过第M条道路的时间,请您分别计算出在这K 个时段中逃离部落的最少时间,以帮助他们确定行动的时刻。

\(Input\)

第一行三个整数N,M,K,分别表示区域数,道路数,询问数。

接下来M−1行每行三个整数 \(ui,vi,wi(ui≠vi,1≤ui,vi≤N,0<wi≤10^9)\),表示这条道路连接的区域和通过时间。

紧接着是两个整数 \(ui,vi(ui≠vi,1≤ui,vi≤N)\),表示第M条道路连接的区域。

最后K行,每行一个正整数 \(xi(0<xi≤10^9)\),表示目前第M条道路的通过时间。

\(Output\)

输出共计K行,每行一个整数,表示对应时段逃离部落的最短时间。如果在该时段内无法逃离,输出“+Inf”。

\(Sample Input\)

输入1:

4 5 4

1 2 7

1 3 4

2 4 3

3 4 6

2 3

1

2

4

6

输入2:

4 3 1

1 2 7

1 3 4

2 3

9

\(Sample Output\)

输出1:

8

9

10

10

输出2:

+Inf

Hint

代码(常数巨大,不得不开O)

#pragma GCC optimize(2)
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
typedef long long LL; const int N = 200000 , M = 500000;
const LL INF = 1e16 + 10;
int n , m , k , h[N + 5] , vis[N + 5] , tot = 1 , u , v;
LL dis1[N + 5] , disu[N + 5] , disv[N + 5] , ans , w; struct edge{
int to , nxt;
LL w;
}e[(M << 1) + 5];
struct node{
int id;
LL d;
bool operator < (node c) const
{
return d > c.d;
}
}; inline void add(int u , int v , int w)
{
e[++tot].to = v , e[tot].w = w , e[tot].nxt = h[u] , h[u] = tot;
} inline LL Min(LL x , LL y) { return x < y ? x : y; }; priority_queue<node> q; inline void dij1()
{
memset(vis , 0 , sizeof(vis));
dis1[1] = 0;
q.push((node){1 , 0});
while (!q.empty())
{
node x = q.top();
q.pop();
if (vis[x.id]) continue;
vis[x.id] = 1;
for(register int i = h[x.id]; i; i = e[i].nxt)
{
if (dis1[x.id] + e[i].w < dis1[e[i].to])
{
dis1[e[i].to] = dis1[x.id] + e[i].w;
q.push((node){e[i].to , dis1[e[i].to]});
}
}
}
} priority_queue<node> Q; inline void diju()
{
memset(vis , 0 , sizeof(vis));
disu[u] = 0;
Q.push((node){u , 0});
while (!Q.empty())
{
node x = Q.top();
Q.pop();
if (vis[x.id]) continue;
vis[x.id] = 1;
for(register int i = h[x.id]; i; i = e[i].nxt)
{
if (disu[x.id] + e[i].w < disu[e[i].to])
{
disu[e[i].to] = disu[x.id] + e[i].w;
Q.push((node){e[i].to , disu[e[i].to]});
}
}
}
} priority_queue<node> QQ; inline void dijv()
{
memset(vis , 0 , sizeof(vis));
disv[v] = 0;
QQ.push((node){v , 0});
while (!QQ.empty())
{
node x = QQ.top();
QQ.pop();
if (vis[x.id]) continue;
vis[x.id] = 1;
for(register int i = h[x.id]; i; i = e[i].nxt)
{
if (disv[x.id] + e[i].w < disv[e[i].to])
{
disv[e[i].to] = disv[x.id] + e[i].w;
QQ.push((node){e[i].to , disv[e[i].to]});
}
}
}
} int main()
{
freopen("monogatari.in" , "r" , stdin);
freopen("monogatari.out" , "w" , stdout);
scanf("%d%d%d" , &n , &m , &k);
for(register int i = 1; i < m; i++)
{
scanf("%d%d%lld" , &u , &v , &w);
add(u , v , w) , add(v , u , w);
}
for(register int i = 1; i <= n; i++)
dis1[i] = INF , disu[i] = INF , disv[i] = INF;
scanf("%d%d" , &u , &v);
dij1() , diju() , dijv();
for(register int i = 1; i <= k; i++)
{
scanf("%lld" , &w);
ans = dis1[n];
if (dis1[u] != INF && disv[n] != INF) ans = Min(ans , dis1[u] + w + disv[n]);
if (dis1[v] != INF && disu[n] != INF) ans = Min(ans , dis1[v] + w + disu[n]);
if (ans == INF) printf("+Inf\n");
else printf("%lld\n" , ans);
}
}

物语(monogatari)的更多相关文章

  1. UESTC_秋实大哥の恋爱物语 2015 UESTC Training for Search Algorithm & String<Problem K>

    K - 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others)     Memory Limit: 32000/32000KB (Java/Others) Su ...

  2. 怪奇物语第二季/全集Stranger Things迅雷下载

    Netflix的叫好叫座剧<怪奇物语 Stranger Things>第二季更新上线日期为美国时间10月27日,第二季讲述在1984年(相隔上季一年),印第安纳州的Hawkins镇市民仍然 ...

  3. 2015 UESTC 搜索专题K题 秋实大哥の恋爱物语 kmp

    秋实大哥の恋爱物语 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 De ...

  4. cdoj1091-秋实大哥の恋爱物语 【kmp】

    http://acm.uestc.edu.cn/#/problem/show/1091 秋实大哥の恋爱物语 Time Limit: 5000/2000MS (Java/Others)     Memo ...

  5. FZU 2234 牧场物语【多线程dp】

     Problem 2234 牧场物语  Problem Description 小茗同学正在玩牧场物语.该游戏的地图可看成一个边长为n的正方形. 小茗同学突然心血来潮要去砍树,然而,斧头在小茗的右下方 ...

  6. FZU2234 牧场物语 DP

    题意:先去再回,不能吃重复的,获取最大值 分析:等价于两个人同时去,不能吃重复的 定义dp[i][j][k]表示从起点走k步,第一个人的横坐标是i,第二个人的横坐标是j的最最大值 这个题和bc上一个回 ...

  7. 星座物语APP

    效果图: 这里的后台管理用的是duducat,大家可以去百度看说明.图片,文字都在duducat后台服务器上,可以自己修改的.(PS:图片这里是随便找的) http://www.duducat.com ...

  8. 一步一步搞懂支持向量机——从牧场物语到SVM(上)

    之前在数据挖掘课程上写了篇关于SVM的"科普文",尽量通俗地介绍了SVM的原理和对各公式的理解.最近给正在初学机器学习的小白室友看了一遍,他觉得"很好,看得很舒服&quo ...

  9. NOIP2016——大家一起实现の物语

    由于最近硬盘挂了,换了个固态硬盘,比赛结束后四天一直在装Linux,所以最近一直没怎么更新 看起来挺漂亮的 比赛前一个月申请停了一个月晚自习,在我们这座城市里能做到这种事情已经可以被称为奇迹了,并且在 ...

  10. 荒木毬菜 小情歌日文版 - 独身OL之歌

    咎(とが)めるつもりもないけどtogameru tumorimo naikedo并不想责备在身旁 暇(ひま)してる时间(じかん)をhimashiteru jikan wo无所事事的时间 パジャマの鸟( ...

随机推荐

  1. python调用c++生成的dll

    前言 这个我查询了很多资料,所以到此为止,相当于做一个总结 c++代码如何生成dll #include<iostream> using namespace std; extern &quo ...

  2. BrokenPipeError错误和subprocess.run()超时参数在Windows上无效

    1.问题的发现   今天,一个在windows上运行良好的python脚本放到linux下报错,提示错误 BrokenPipeError: [Errno 32]Broken pipe.经调查是subp ...

  3. 【每日一题】【动态规划&二分】2022年2月9日-NC91 最长上升子序列(三)

    描述给定数组 arr ,设长度为 n ,输出 arr 的最长上升子序列.(如果有多个答案,请输出其中 按数值(注:区别于按单个字符的ASCII码值)进行比较的 字典序最小的那个) 方法1:双层循环实现 ...

  4. 有来实验室|第一篇:Seata1.5.2版本部署和开源全栈商城订单支付业务实战

    在线体验:Seata实验室 一. 前言 相信 youlai-mall 的实验室大家有曾在项目中见到过,但应该都还处于陌生的阶段,毕竟在此之前实验室多是以概念般的形式存在,所以我想借着此次的机会,对其进 ...

  5. TinyShell(CSAPP实验)

    简介 CSAPP实验介绍 学生实现他们自己的带有作业控制的Unix Shell程序,包括Ctrl + C和Ctrl + Z按键,fg,bg,和 jobs命令.这是学生第一次接触并发,并且让他们对Uni ...

  6. 一文速览 Dubbo 3.0

    本文将带你快速了解 Dubbo3 的设计背景.总体架构与核心特性.与典型用户如阿里巴巴 HSF2 的关系等.也可以通过如下部分了解更多: 小白用户,快速浏览 Dubbo3 核心特性: 下一代通信协议 ...

  7. 读python代码-学到的python函数-1

    1.with open(data_path,'r') as f: with open()是python用来打开本地文件的,他会在使用完毕后,自动关闭文件,无需手动书写close(). 三种打开模式: ...

  8. AspNetCore管道

    title: Asp.Net Core底层源码剖析(一)中间件/管道 categories: 后端 tags: - .NET 当我们像下面这样添加一个管道时发生了什么? app.Use(async ( ...

  9. [WPF]C#调用C++代码(通过C++/CLI)

    用途 通过使用C++ + Opencv 编写算法,然后用WPF(C#)编写程序界面,实现交互 可以参考MSDN文档:https://docs.microsoft.com/en-us/cpp/windo ...

  10. 使用 Link Cut Tree 维护最小生成树

    简介 本文将简单介绍如何使用 Link Cut Tree 维护动态图最小生成树. 思路 最小生成树的性质:一个基环树的最小生成树,为将环上边权最大的边删除后所组成的树. Proof:如果删除环上的其他 ...