A*算法:

A*,启发式搜索,是一种较为有效的搜索方法。
我们在搜索的时候,很多时候在当前状态,已经不是最优解了,但是我们却继续求解;这个就是暴力搜索浪费时间的原因。
我们在有些时候,往往可以根据一些信息推断出继续搜索是一种劣解。
所以如果能够判断出来的话,就可以不继续了,以达到节省运行时间的目的。

估价函数:

为了提高搜索效率,我们可以对未来可能产生的代价进行预估。我们设计一个估价函数,以任意状态输入,计算出从该状态到目标状态所需代价的估计值。
在搜索时,我们总沿着当前代价+未来估价最小的状态进行搜索。 估价函数需要满足:
  设当前状态state到目标函数所需代价的估计值为f(state)
  设在未来的搜索中,实际求出的从当前状态state到目标状态的最小代价为g(state)
  对于任意的state,应该有f(state)<=g(state)
也就是说,估价函数的估值不能大于未来实际代价,估价比实际代价更优。

第K短路:

根据估价函数的设计准则,在第K短路中从x到T的估计距离f(x)应该不大于第K短路中从x到T的实际距离g(x),于是,我们可以把估价函数f(x)定为从x到T的最短路径长度,这样不但能保证f(x)<=g(x),还能顺应g(x)的实际变化趋势。
实现过程:
.预处理f(x),在反向图上以T为起点求到每个点的最短路
.定义堆,维护{p,g,h},p是某一个点,g是估价,h是实际,那么g+h更小的点p会优先访问
.取出堆顶元素u扩展,如果节点v被取出的次数尚未达到k,就把新的{v,g,h+length(u,v)}插入堆中
.重复第2-3步,直到第K次取出终点T,此时走过的路径长度就是第K短路 因为估价函数的作用,图中很多节点访问次数远小于K

One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. However, Pucci the father somehow knows it and wants to stop her. There are NN spots in the jail and MM roads connecting some of the spots. JOJO finds that Pucci knows the route of the former (K-1)(K−1)-th shortest path. If Pucci spots JOJO in one of these K-1K−1 routes, Pucci will use his stand Whitesnake and put the disk into JOJO's body, which means JOJO won't be able to make it to the destination. So, JOJO needs to take the KK-th quickest path to get to the destination. What's more, JOJO only has TT units of time, so she needs to hurry.

JOJO starts from spot SS, and the destination is numbered EE. It is possible that JOJO's path contains any spot more than one time. Please tell JOJO whether she can make arrive at the destination using no more than TT units of time.

Input

There are at most 5050 test cases.

The first line contains two integers NN and MM (1 \leq N \leq 1000, 0 \leq M \leq 10000)(1≤N≤1000,0≤M≤10000). Stations are numbered from 11 to NN.

The second line contains four numbers S, E, KS,E,K and TT ( 1 \leq S,E \leq N1≤S,E≤N, S \neq ES≠E, 1 \leq K \leq 100001≤K≤10000, 1 \leq T \leq 1000000001≤T≤100000000 ).

Then MM lines follows, each line containing three numbers U, VU,V and WW (1 \leq U,V \leq N, 1 \leq W \leq 1000)(1≤U,V≤N,1≤W≤1000) . It shows that there is a directed road from UU-th spot to VV-th spot with time WW.

It is guaranteed that for any two spots there will be only one directed road from spot AA to spot BB (1 \leq A,B \leq N, A \neq B)(1≤A,B≤N,A≠B), but it is possible that both directed road <A,B><A,B> and directed road <B,A><B,A>exist.

All the test cases are generated randomly.

Output

One line containing a sentence. If it is possible for JOJO to arrive at the destination in time, output "yareyaredawa" (without quote), else output "Whitesnake!" (without quote).

样例输入

2 2

1 2 2 14

1 2 5

2 1 4

样例输出

yareyaredawa

#include <bits/stdc++.h>
using namespace std;
const int N=;
const int M=;
inline int read()
{
int x=,f=;char ch=getchar();
while (ch<'' || ch>''){if (ch=='-') f=-;ch=getchar();}
while (ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m,sta,en,kth,T,Ecnt,Eoppcnt;
int dist[N];
int times[N];
bool vis[N];
struct Edge{
int to,next,val;}E[M],Eopp[M];//Eopp means Eopposite
int last[N],last_opp[N];
struct A_Star_node{
int p,g,h;
bool operator < (A_Star_node x)const
{
return x.g+x.h<g+h;
}
};//means point and a_Star:f(x)=g(x)+h(x);
priority_queue<A_Star_node>Q;
inline void add(int u,int v,int w)
{
Ecnt++;
E[Ecnt].next=last[u];
E[Ecnt].to=v;
E[Ecnt].val=w;
last[u]=Ecnt;
}
inline void add_opposite(int u,int v,int w)
{
Eoppcnt++;
Eopp[Eoppcnt].next=last_opp[u];
Eopp[Eoppcnt].to=v;
Eopp[Eoppcnt].val=w;
last_opp[u]=Eoppcnt;
}
void dij(int s,int e)
{
memset(vis,,sizeof(vis));
memset(dist,,sizeof(dist));
int mi;
dist[e]=;
for (int i=;i<=n;i++)
{
mi=;
for (int j=;j<=n;j++)
if (!vis[j] && dist[mi]>dist[j]) mi=j;
vis[mi]=;
for (int x=last_opp[mi];x;x=Eopp[x].next)
dist[Eopp[x].to]=min(dist[Eopp[x].to],dist[mi]+Eopp[x].val);
}
}
int A_Star(int s,int e)
{
A_Star_node t1,tmp;
memset(times,,sizeof(times));
while (!Q.empty()) Q.pop();
t1.g=t1.h=; t1.p=s;
Q.push(t1);
while (!Q.empty())
{
t1=Q.top(); Q.pop();
times[t1.p]++;
if (times[t1.p]<=kth && t1.h>T) return -;//K短路之前的路已经比要求的时间长了,一定是不合法的方案
if (times[t1.p]==kth && t1.p==e) return t1.h;
if (times[t1.p]>kth) continue;
for (int i=last[t1.p];i;i=E[i].next)
{
tmp.p=E[i].to;
tmp.g=dist[E[i].to];
tmp.h=E[i].val+t1.h;
Q.push(tmp);
}
}
return -;
}
int main()
{
while (scanf("%d%d",&n,&m)!=EOF)
{
sta=read(); en=read(); kth=read(); T=read();
int x,y,z;
memset(last,,sizeof(last));
memset(last_opp,,sizeof(last_opp));
Ecnt=;
Eoppcnt=;
while (m--)
{
x=read(); y=read(); z=read();
add(x,y,z);
add_opposite(y,x,z);
}
dij(sta,en);
if (sta==en) kth++;
int ans=A_Star(sta,en);
if (ans==-||ans>T) puts("Whitesnake!");
else puts("yareyaredawa");
}
return ;
}

ACM-ICPC2018 沈阳赛区网络预赛-D-Made In Heaven8的更多相关文章

  1. ACM-ICPC 2018 沈阳赛区网络预赛 K Supreme Number(规律)

    https://nanti.jisuanke.com/t/31452 题意 给出一个n (2 ≤ N ≤ 10100 ),找到最接近且小于n的一个数,这个数需要满足每位上的数字构成的集合的每个非空子集 ...

  2. ACM-ICPC 2018 沈阳赛区网络预赛-K:Supreme Number

    Supreme Number A prime number (or a prime) is a natural number greater than 11 that cannot be formed ...

  3. ACM-ICPC 2018 沈阳赛区网络预赛-D:Made In Heaven(K短路+A*模板)

    Made In Heaven One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. ...

  4. 图上两点之间的第k最短路径的长度 ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven

    131072K   One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. Howe ...

  5. ACM-ICPC 2018 沈阳赛区网络预赛 J树分块

    J. Ka Chang Given a rooted tree ( the root is node 11 ) of NN nodes. Initially, each node has zero p ...

  6. ACM-ICPC 2018 沈阳赛区网络预赛 K. Supreme Number

    A prime number (or a prime) is a natural number greater than 11 that cannot be formed by multiplying ...

  7. ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph

    "Oh, There is a bipartite graph.""Make it Fantastic." X wants to check whether a ...

  8. ACM-ICPC 2018 沈阳赛区网络预赛 F Fantastic Graph(贪心或有源汇上下界网络流)

    https://nanti.jisuanke.com/t/31447 题意 一个二分图,左边N个点,右边M个点,中间K条边,问你是否可以删掉边使得所有点的度数在[L,R]之间 分析 最大流不太会.. ...

  9. ACM-ICPC 2018 沈阳赛区网络预赛 B Call of Accepted(表达式求值)

    https://nanti.jisuanke.com/t/31443 题意 给出一个表达式,求最小值和最大值. 表达式中的运算符只有'+'.'-'.'*'.'d',xdy 表示一个 y 面的骰子 ro ...

  10. ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire(容斥)

    https://nanti.jisuanke.com/t/31448 题意 已知a序列,给你一个n和m求小于n与m互质的数作为a序列的下标的和 分析 打表发现ai=i*(i+1). 易得前n项和为 S ...

随机推荐

  1. 实验一 MiniOS

    实验一.命令解释程序的编写实验 商软1班   杨晶晶  201406114102 一.        实验目的 (1)掌握命令解释程序的原理: (2)掌握简单的DOS调用方法: (3)掌握C语言编程初 ...

  2. RIGHT-BICEP测试第二次

    1.Right-结果是否正确? 正确 2.B-是否所有的边界条件都是正确的? 正确 3.P-是否满足性能要求? 部分满足 4.是否满足有无括号? 无 5.数字个数是否不超过十? 只是双目运算 6.能否 ...

  3. hdu1242 Rescue DFS(路径探索题)

    这里我定义的路径探索题指 找某路能够到达目的地,每次走都有方向,由于是探索性的走 之后要后退 那些走过的状态都还原掉 地址:http://acm.hdu.edu.cn/showproblem.php? ...

  4. lintcode-422-最后一个单词的长度

    422-最后一个单词的长度 给定一个字符串, 包含大小写字母.空格' ',请返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 注意事项 一个单词的界定是,由字母组成,但不包含任何的空 ...

  5. 使用 python 管理 mysql 开发工具箱 - 2

    这篇博文接着上篇文章<使用 python 管理 mysql 开发工具箱 - 1>,继续写下自己学习 python 管理 MySQL 中的知识记录. 一.MySQL 的读写分离 学习完 My ...

  6. NFS 它的目的就是想让不同的机器、不同的作业系统可以彼此分享个别的档案啦

    NFS即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件, ...

  7. PHP SQL查询结果在页面上是乱码

    今天系统网页出现这样一个问题:下图左边类型栏数据是没显示出来 打印SQL查询的数据是有的 原因是:————> eval函数里'return '这一字符串一定要有空格哈,没有空格,这语句就是错的. ...

  8. react-自定义事件

    没有嵌套关系的组件(如兄弟组件)之间的通信,只能通过自定义事件的方式来进行. var EventEmitter = require('events').EventEmitter; import Rea ...

  9. Dbgrid控件多重选择的怪问题。BookMarkList,BookMark,使用书签,用的ADOQuery控件。100分送上,急阿!!!请高手帮忙!

    Dbgrid控件多重选择的怪问题.BookMarkList,BookMark,使用书签,用的ADOQuery控件.100分送上,急阿!!!请高手帮忙! ( 积分: 100 )<br />p ...

  10. bootstrap 中的静态模式的控制按钮上的一个坑

    在使用modal时发现,代码:<button class="btn btn-danger" data-toggle="modal" data-target ...