马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
p2349
思绪
SPFA,最短路。这题要在路径上最大值双倍的情况下,求出最短路。我们可以再盘算每一步的时间算出当前路径的最大值。
假设当前位置是now,下一步是v,边权是w。那么有两种情况
- v . m a x > w v.max > w v.max>w
- v . m a x ≤ w v.max \leq w v.max≤w。
如果是第一种情况,那么当前路径的最大值不消变,直接加上w即可。
d i s [ v ] . s u m = d i s [ n o w ] . s u m + w dis[v].sum=dis[now].sum+w dis[v].sum=dis[now].sum+w
如果是第二种情况,分析最大值须要更新,那么须要把先前所双倍盘算的最大值减去,也是就减去v.max,固然还要加上双倍的w。
d i s [ v ] . s u m = d i s [ n o w ] . s u m + w + w − d i s [ n o w ] . m a x x dis[v].sum=dis[now].sum+w+w-dis[now].maxx dis[v].sum=dis[now].sum+w+w−dis[now].maxx
留意更新max的时间,不可以在当前的最大值与w之间取最大值。由于max取的是当前路径的最大值,而不是以当前点作为尽头的全部路上的最大值。
留意
代码
- #include<bits/stdc++.h>
- #include<cstring>
- #include<queue>
- #include<set>
- #include<stack>
- #include<vector>
- #include<map>
- #define ll long long
- #define lhs printf("\n");
- using namespace std;
- const int N=1e5+10;
- const int M=2024;
- const int inf=0x3f3f3f3f;
- int n,m;
- vector<int> a[N];
- vector<int> b[N];
- struct node
- {
- int sum,maxx;
- }dis[N];
- void spfa()
- {
- for(int i=1;i<=N;i++)
- {
- dis[i].maxx=0;
- dis[i].sum=inf;
- }
- queue<int> q;
- q.push(1);
- dis[1].sum=0;
- while(q.size())
- {
- int now=q.front();
- q.pop();
- for(int i=0;i<a[now].size();i++)
- {
- int v=a[now][i];
- int w=b[now][i];
- if(w>dis[now].maxx)
- {
- if(dis[v].sum>dis[now].sum+w+w-dis[now].maxx)
- {
- dis[v].sum=dis[now].sum+w+w-dis[now].maxx;
- dis[v].maxx=w;
- q.push(v);
- }
- }
- else
- {
- if(dis[v].sum>dis[now].sum+w)
- {
- dis[v].maxx=dis[now].maxx;
- dis[v].sum=dis[now].sum+w;
- q.push(v);
- }
- }
- }
- }
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- for(int i=1;i<=m;i++)
- {
- int x,y,z;
- scanf("%d%d%d",&x,&y,&z);
- a[x].push_back(y);
- b[x].push_back(z);
- a[y].push_back(x);
- b[y].push_back(z);
- }
- spfa();
- printf("%d\n",dis[n].sum);
- // for(int i=1;i<=n;i++)
- // {
- // cout<<dis[i].sum<<" "<<dis[i].maxx<<"\n";
- // }
- return 0;
- }
- /*
- 7 8
- 1 2 114
- 2 3 200
- 1 3 100
- 3 4 5
- 4 6 10
- 4 5 20
- 5 7 30
- 4 7 40
- */
复制代码 AC纪录
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |