luogu P1462 通往奥格瑞玛的道路 最短路

Posted iat14

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1462 通往奥格瑞玛的道路 最短路相关的知识,希望对你有一定的参考价值。

二分最大钱数即可。

 1 #include <cstdio>
 2 #include <queue>
 3 #include <algorithm>
 4 #include <cstring>
 5 using namespace std;
 6 typedef long long ll;
 7 struct pot
 8 
 9     int x;
10     ll dis;
11     pot (int _x = 0,ll _dis = 0) : x(_x),dis(_dis) 
12     friend bool operator < (pot a,pot b)
13     
14         return a.dis > b.dis;
15     
16 ;
17 int head[11000],to[110000],cst[110000],nxt[110000],val[110000];
18 bool vis[11000];
19 ll dis[11000];
20 priority_queue <pot> que;
21 int b,n,m,cnt;
22 void add(int x,int y,int v)
23 
24     nxt[++cnt] = head[x];
25     to[cnt] = y;
26     head[x] = cnt;
27     val[cnt] = v;
28 
29 void dijkstra(int s,int lmt)
30 
31     for(int i=1; i<= n; i++) dis[i]=2e14;
32     que.push(pot(s,0));
33     dis[s]=0;
34     memset(vis,0,sizeof(vis));
35     while(!que.empty())
36     
37         pot now=que.top();
38         que.pop();
39         if(vis[now.x]) continue;
40         vis[now.x]=true;
41         for(int i = head[now.x]; i; i=nxt[i])
42         
43             if (cst[to[i]] > lmt) continue;
44             if(dis[to[i]]>dis[now.x]+val[i])
45             
46                 dis[to[i]]=dis[now.x]+val[i];
47                 que.push(pot(to[i],dis[to[i]]));
48             
49         
50     
51 
52 int main()
53 
54     scanf("%d%d%d",&n,&m,&b);
55     for (int i = 1;i <= n;i++) scanf("%d",&cst[i]);
56     int tx,ty,tv;
57     for (int i = 1;i <= m;i++) 
58     
59         scanf("%d%d%d",&tx,&ty,&tv);
60         add(tx,ty,tv);
61         add(ty,tx,tv); 
62     
63     int l = 0,r = 1000000000,mid;
64     while (l < r)
65     
66         mid = l + r >> 1;
67         dijkstra(1,mid);
68         if (dis[n] <= b) r = mid;
69         else l = mid + 1;
70     
71     dijkstra(1,l);
72     if (dis[n] <= b) printf("%d\n",l);
73     else printf("AFK\n");
74     return 0;
75 

 

以上是关于luogu P1462 通往奥格瑞玛的道路 最短路的主要内容,如果未能解决你的问题,请参考以下文章

luogu P1462 通往奥格瑞玛的道路

洛谷P1462通往奥格瑞玛的道路——二分答案最短路

P1462 通往奥格瑞玛的道路 (二分+最短路)

luogu题解 P1462 通往奥格瑞玛的道路二分+spfa

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

P1462 通往奥格瑞玛的道路 最短路