http://hihocoder.com/problemset/problem/1139

这题提示上写的是二分,但是感觉不二分应该也可以,至少题目是AC的。。。

二分的思想就是二分答案的值,看能不能在k步内,得到这个答案值,可以采用bfs来判定。

不二分的话,就是需要一个dis[]数组来保存在前k步内,每个点的最小索敌值,因为bfs在往后的过程中step是越来越大的,所以前面能达到更小的,显然不会重复再跑大的,然后bfs的过程中更新即可。类似于spfa,但是没有对队列去重。

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <vector>
#define LL long long using namespace std; const int maxN = ;
//链式前向星
struct Edge
{
int to, next;
int val;
}edge[maxN*]; int head[maxN], cnt; void addEdge(int u, int v, int val)
{
edge[cnt].to = v;
edge[cnt].next = head[u];
edge[cnt].val = val;
head[u] = cnt;
cnt++;
} void initEdge()
{
memset(head, -, sizeof(head));
cnt = ;
} int n, m, k, to;
LL dis[maxN]; void input()
{
initEdge();
memset(dis, -, sizeof(dis));
int u, v, t;
for (int i = ; i <= m; ++i)
{
scanf("%d%d%d", &u, &v, &t);
addEdge(u, v, t);
addEdge(v, u, t);
}
} inline LL myMax(LL x, LL y)
{
return x > y ? x : y;
} struct Item
{
int index;
LL val;
int step;
}; void work()
{
int u, v, t, step;
LL val, len;
Item p, tmp;
queue<Item> q;
dis[]= ;
p.index = ;
p.step = ;
p.val = ;
q.push(p);
while (!q.empty())
{
p = q.front();
q.pop();
u = p.index;
step = p.step;
val = p.val;
for (int i = head[u]; i != -; i = edge[i].next)
{
v = edge[i].to;
len = edge[i].val;
if (dis[v] == - || myMax(val, len) < dis[v])
{
dis[v] = myMax(val, len);
p.index = v;
p.step = step+;
p.val = dis[v];
if (p.step < k)
q.push(p);
}
}
}
cout << dis[to] << endl;
} int main()
{
//freopen("test.in", "r", stdin);
//freopen("test.out", "w", stdout);
while (scanf("%d%d%d%d", &n, &m, &k, &to) != EOF)
{
input();
work();
}
return ;
}

最新文章

  1. VS2010 LINK1123:failure during conversion to COFF:file invalid or corrupt
  2. 利用netperf、iperf、mtr测试网络
  3. 状态压缩 HDU 3182
  4. 9.SpringMVC和json结合传递参数
  5. 安装好android的adt以后重启eclipse,但是没有创建AVD的图标
  6. 洛谷 P1896 [SCOI2005]互不侵犯King
  7. Hibernate一对多和多对一关系详解 (转载)
  8. c#将金额转换为大写,支持小数点,原创经典
  9. JqueryUI-3
  10. Linux项目自动部署
  11. Tomcat和Java Virtual Machine的性能调优总结
  12. Hadoop HA高可用集群搭建(Hadoop+Zookeeper+HBase)
  13. layui超链接追加tab选项卡必须手动刷新才出现问题
  14. [备份]EntityFramework
  15. CSS3 常用选择器
  16. FAST Hello World - Preparation for software&#39;s running environment
  17. KAFKA安装+配置详解+常用操作+监控
  18. 破解IDEA Ultimate2017 测试
  19. Spring Chapter4 WebSocket 胡乱翻译 (一) 一个例子
  20. C 碎片十 关键字&amp;库函数

热门文章

  1. 我的npm笔记
  2. 每天一个Linux命令(42)watch命令
  3. java PinYinUtils 拼音工具类
  4. HAproxy 源码包安装
  5. console、JSON兼容问题
  6. 20145231 《Java程序设计》第一周学习总结
  7. JavaWeb CSS
  8. vRO Extend VirtualDisk Workflow
  9. Docker 监控平台Prometheus
  10. ifconfig源代码分析