\(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. 英格索兰扳手网口通信协议EOR原理

    前言 前几天遇到这个需求,需要记录扳手每一次的周期数据,但是我不知道通信协议是什么,只知道是一个tcp的连接,问售后,也不给我网口调试软件(英格索兰自己家的软件).经过我俩天的谷歌,终于找到了他们公司 ...

  2. day22 存储过程 & 游标 & 事务

    存储过程 是一种在数据库中存储复杂程序(复杂sql语句),以便外部程序调用的一种数据库对象 存储过程是为了完成特定功能的sql语句集,经编译创建并保存在数据库中,用户可以通过指定存储过程的名字并给定参 ...

  3. [论文阅读] 颜色迁移-Linear Monge-Kantorovitch(MKL)

    [论文阅读] 颜色迁移-Linear Monge-Kantorovitch(MKL) 文章: The Linear Monge-Kantorovitch Linear Colour Mapping f ...

  4. Karmada多云多集群生产实践专场圆满落幕

    摘要:CNCF Karmada社区Cloud Native Days China 2022南京站成功举办. 本文分享自华为云社区<Karmada多云多集群生产实践专场圆满落幕|Cloud Nat ...

  5. if-else 的优美写法

    前言‍♂️ 相信大家或多或少都接触过拥有庞大 if else 的项目代码吧,多重嵌套的 if else 在维护的时候真的让人很恼火,有时候一个 bug 排查下来,严重感觉身体被掏空. 本文并未有消灭或 ...

  6. JavaScript:七大基础数据类型:字符串string

    在JS中,字符串类型的数据,有三种表达方式,但是无一例外都是需要引号扩起来的: 单引号'hello' 双引号"hello" 反引号`hello` 注意: 因为JS没有字符类型,这一 ...

  7. 使用xshell连接linux虚拟机

    目录 1.涉及的软件 2.连接步骤 2.1.虚拟机网络连接设置 2.2.配置linux的ip地址 2.3.关闭linux的防火墙 2.4.启动ssh服务 2.5.使用xshell连接linux 1.涉 ...

  8. Spark详解(08) - Spark(3.0)内核解析和源码欣赏

    Spark详解(08) - Spark(3.0)内核解析和源码欣赏 源码全流程 Spark提交流程(YarnCluster) Spark通讯架构 Spark任务划分 Task任务调度 Shuffle原 ...

  9. python之路22 hashlib、subprocess、logging模块

    hashlib加密模块 hashlib模块为不同的安全哈希/安全散列(Secure Hash Algorithm)和 信息摘要算法(Message Digest Algorithm)实现了一个公共的. ...

  10. P8855 [POI2002]商务旅行

    简要题意 给出一个 \(N\) 个节点的树和一个长度为 \(M\) 的序列 \(S\).你需要从 \(1\) 出发,依次经过 \(S\) 中的所有点,求至少需要经过的边数. \(1 \le N \le ...