题号:NC200087
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
给一个n个站点m条边的无向图,每条边有边权,cat想出去玩,给出cat出发的起点s和旅行的终点t,cat背了一个容量为v的书包装有零食补充体力,如果有一条边距离超过v那么cat不能走这条边,因为他会体力不支走不动,每到一个站点cat都能买零食把书包重新填满,此外,cat还有k张万能车票,如果一条边距离超过v,它能使用一张车票坐车经过这条边,但是cat很懒不想背太重的书包,现在你来告诉它v最小可以设多少使得cat能顺利到达终点
输入描述:
第一行输入三个数n,m,k(1 <= n <=2e5,n - 1 <= m, k <= 4e5)
第二行输入两个数s,t,表示起点和终点(1 <= s, t <= n)
接下来m行输入三个数u, v, w代表u与v连接有一条距离为w的边(1 <= u, v <= n,1 <= w <= 1e9)
输出描述:
输出一个数表示答案
示例1
输入
复制
5 4 2
1 5
1 2 1
2 3 2
3 4 3
4 5 2
说明
提示:数据量较大,dfs小心爆栈,推荐链向星建图
链向星建图用法:
加边:
void add(int u, int v, int w) // u 连接一条边到 v,权值为w
{
Next[++cnt] = Laxt[u];
Laxt[u] = cnt;
To[cnt] = v;
Len[cnt] = w;
}
清空:
void init()
{
for (int i = 1; i <= n; i++)
Laxt[i] = 0;
cnt = 0;
}
遍历:
for (int i = Laxt[u]; i; i = Next[i])
{
int v = To[i];
int w = Len[i];
/*
*/
}
备注:
保证图联通无重边