洛谷P1462 通往奥格瑞玛的道路
二分答案+最短路SPFA
二分交费最多的一次的钱数
然后只将符合要求的边加入图中
如果到终点的最短路大于等于血量 或者直接起点不能到达终点
那么说明不符合要求 需要加大答案

时间复杂度 (log答案)* Ek
需要注意如果本来就不能到达
那么直接输出AFK

 1 #include <bits/stdc++.h>
 2 #define LL long long
 3 #define For(i,j,k) for(int i=j;i<=k;i++)
 4 using namespace std ;
 5
 6 const int N = 10011 , M = 50011 ;
 7 struct node{
 8     LL to,pre,val ;
 9 }e[M*2];
10 struct edge{
11     LL x,y,val ;
12 }beg[M];
13 LL n,m,b,cnt,point[N],head[N],mx,blood,dist[N] ;
14 bool visit[N] ;
15 queue<LL> Q ;
16
17 inline LL read()
18 {
19     LL x = 0 , f = 1 ;
20     char ch = getchar() ;
21     while(ch<'0'||ch>'9') { if(ch=='-') f = -1 ; ch = getchar() ; }
22     while(ch>='0'&&ch<='9') { x = x * 10+ch-48 ; ch = getchar() ; }
23     return x * f ;
24 }
25
26 inline void add(int x,int y,int val)
27 {
28     e[cnt].to = y ;
29     e[cnt].pre = head[x] ;
30     e[cnt].val = val ;
31     head[x] = cnt++ ;
32 }
33
34 inline bool check( int mid )
35 {
36     LL u,v ;
37     For(i,0,n) head[i] = -1,dist[i] = (1LL<<62) ;
38     cnt = 0 ;
39     For(i,1,m) {
40         if( point[beg[ i ].x] > mid ) continue ;
41         if( point[beg[ i ].y] > mid ) continue ;
42         add( beg[ i ].x,beg[ i ].y,beg[ i ].val ) ;
43         add( beg[ i ].y,beg[ i ].x,beg[ i ].val ) ;
44     }
45     while(!Q.empty()) Q.pop() ;
46     Q.push(1) ; dist[ 1 ] = 0 ; visit[ 1 ] = 1 ;
47     while(!Q.empty()) {
48         u = Q.front() ;
49         Q.pop() ;
50         visit[u] = 0 ;
51         for(int i=head[u];~i;i=e[i].pre) {
52             v = e[ i ].to ;
53             if( dist[ u ] +  e[ i ].val < dist[ v ] ) {
54                 dist[ v ] = dist[ u ] + e[ i ].val ;
55                 if( !visit[ v ] ) {
56                     visit[ v ] = 1 ;
57                     Q.push(v) ;
58                 }
59             }
60         }
61     }
62     if( dist[n]>=blood || dist[n]==dist[0] ) return 0 ;   // 血量不够 或者 不能到达
63     return 1 ;
64 }
65
66 inline void erfen()
67 {
68     LL l = 0 , r = mx+1,mid ;
69     while( l < r ) {
70         mid = ( l+r )/2 ;
71         if( check( mid ) )
72             r = mid ;
73         else
74             l = mid+1 ;
75     }
76     if(r==mx+1) {
77         printf("AFK\n") ;
78         exit(0) ;
79     }
80     printf("%d\n",r) ;
81 }
82
83 int main()
84 {
85     n = read() ; m = read() ; blood = read() ;
86     For(i,1,n) point[ i ] = read(),mx = max(mx,point[ i ]) ;
87     For(i,1,m) {
88         beg[ i ].x = read() ; beg[ i ].y = read() ; beg[ i ].val = read() ;
89     }
90     erfen() ;
91     return 0 ;
92 }

转载于:https://www.cnblogs.com/third2333/p/7371874.html

洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA相关推荐

  1. [洛谷1462 ]通往奥格瑞玛的道路---二分答案+spfa

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...

  2. 洛谷 P1462 通往奥格瑞玛的道路 Label: 最小化最大值 spfa (存多条边示例)

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...

  3. 洛谷P1462 通往奥格瑞玛的道路 题解

    洛谷P1462 通往奥格瑞玛的道路 题解 题目链接:P1462 通往奥格瑞玛的道路 题意:在艾泽拉斯,有 nnn 个城市.编号为 1,2,3,-,n1,2,3,\ldots,n1,2,3,-,n . ...

  4. 洛谷P1462 通往奥格瑞玛的道路

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量. 有一天他醒来后发现自己居然到了联盟的主城暴风城. 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛. 题目描述 在艾泽 ...

  5. 洛谷 P1462 通往奥格瑞玛的道路

    Description 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 在艾泽拉 ...

  6. 洛谷1462 通往奥格瑞玛的道路 二分+spfa

    题目链接: https://www.luogu.org/problem/show?pid=1462 题意: 题解: 二分法+最短路判定. 二分经过城市的最大费用w,然后判定:对于每一个费用大于w的城市 ...

  7. P1462 通往奥格瑞玛的道路(二分+dijkstra)

    P1462 通往奥格瑞玛的道路https://www.luogu.com.cn/problem/P1462  一道很不错的题,考察了二分和最短路 #include <iostream> # ...

  8. 洛谷 1462 通往奥格瑞玛的道路

    题目背景 Background 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛. ...

  9. P1462 通往奥格瑞玛的道路(二分 迪杰斯特拉 最短路 + spfa最短路算法)

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...

最新文章

  1. 2021年浙软夏令营预推免面经
  2. 通过自定义资源扩展Kubernetes
  3. flash中Stage,stage,root和this的区别用法
  4. linux安装tomcat Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
  5. CSS块元素水平垂直居中的实现技巧
  6. ArcGIS Server for JavaScript 3.3 的安装部署
  7. opc服务器组态文件已写保护_远程组态软件不仅方便了PLC无线远程监控,也大大降低了工程成本...
  8. centos7 centos-home 磁盘空间转移至centos-root下(磁盘空间不足,磁盘不足)
  9. iphone 微信下浏览器中数字去除下划线
  10. Home_W的几何题 (计算几何)
  11. Vijos1755 靶形数独 Sudoku NOIP2009 提高组 T4 舞蹈链 DLX
  12. 《java入门第一季》之面向对象(成员方法)
  13. mysql1.0.17.0安装教程_mysql 8.0.17 安装配置图文教程
  14. 记 * 恢复ext4硬盘的数据
  15. 几何公差学习笔记(一)-- 公差要素的概念
  16. Nature呼吁:应对21世纪的大规模流行病,各个学科必须联合起来
  17. 用python画满天星_Python用27行代码绘制一幅满天星
  18. Completed 403 FORBIDDEN 后端解决跨域问题
  19. 【转】 HMC与VIOS对新LPAR提供存储与网络虚拟化的支持
  20. 高德地图实现多天路线规划(途经点显示自定义内容)+轨迹回放(显示车牌)

热门文章

  1. Boost:circular buffer的测试程序
  2. C++如何使用puff()的示例
  3. ITK:观察事件 Observe An Event
  4. ITK:计算两个3D点之间的距离
  5. VTK:IO之ReadPlainTextTriangles
  6. VTK:几何对象之PolygonIntersection
  7. C语言实现二分法检索binary search(附完整源码)
  8. C语言将不固定的表达式转换为后缀表达式(附完整源码)
  9. 查找数组中任一峰值的下标
  10. QT的QWinThumbnailToolBar类的使用