解题思路

这是一道最短路题目,不知道大家有没有做过玛丽卡这道题目,如果没做,在做完这道题之后可以去拿个双倍经验哦

先求出一张图中的最短路径,并将其记录下来,我们首先思考:要有增量的前提是新的最短路径比原先的要短,那就好办了,我们枚举将最短路径中的每一条边都翻倍,再跑最短路。这样的出来的路径去一个最大值,到最后减去一开始的最短路径,这就是答案,为什么呢,因为如果我们对不在最短路径中的边进行翻倍的操作,那最短路径肯定没变,还是那样,所以只能改变最短路径中的边。

附上代码

#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm> using namespace std; typedef pair<int, int> P;
const int maxnode = , maxedge = , INF = ;
priority_queue<P, vector<P>, greater<P> > Q;
int n, m, fir[maxnode], nxt[maxedge], cnt, pre[maxnode], Ans;
int u[maxedge], v[maxedge], w[maxedge], dis[maxnode], bef;
bool cut[maxnode][maxnode], flag;
inline void addedge(int x, int y, int z) {
nxt[++cnt] = fir[x];
fir[x] = cnt;
u[cnt] = x, v[cnt] = y, w[cnt] = z;
}
inline void Dijkstra() {
Q.push(P(, ));
fill(dis+, dis++n, INF);
dis[] = ;
P x;
int k;
while (!Q.empty()) {
x = Q.top();
Q.pop();
if(x.first > dis[x.second]) continue;
k = fir[x.second];
while (k != -) {
if(cut[u[k]][v[k]]) {
if(dis[v[k]] > dis[u[k]] + w[k] + w[k]) {
dis[v[k]] = dis[u[k]] + w[k] + w[k];
Q.push(P(dis[v[k]], v[k]));
}
}
else if(dis[v[k]] > dis[u[k]] + w[k]) {
dis[v[k]] = dis[u[k]] + w[k];
if(!flag) pre[v[k]] = u[k];
Q.push(P(dis[v[k]], v[k]));
}
k = nxt[k];
}
}
} int main() {
scanf("%d%d", &n, &m);
int x, y, z;
memset(fir, -, sizeof(fir));
for(int i=; i<=m; i++) {
scanf("%d%d%d", &x, &y, &z);
addedge(x, y, z);
addedge(y, x, z);
}
flag = false;
Dijkstra();
flag = true;
bef = dis[n];
for(int i=n; i!=; i=pre[i]) {
cut[i][pre[i]] = ;
cut[pre[i]][i] = ;
Dijkstra();
cut[i][pre[i]] = ;
cut[pre[i]][i] = ;
Ans = max(Ans, dis[n]);
}
printf("%d", Ans-bef);
}

最新文章

  1. OpenCV绘图
  2. JS代码格式化和语法着色
  3. 3801. String LD
  4. linphone3.4.0代码分析
  5. 【虚拟化】支持IDE/SATA/SCSI
  6. java邮件发送(以163邮箱为例)
  7. CodeForces 698B Fix a Tree (并查集应用)
  8. 利用光场进行深度图估计(Depth Estimation)算法之一——聚焦算法
  9. 列举Java中常用的包、类和接口
  10. 『字符串模式匹配 KMP』
  11. JavaScript数据类型之布尔类型
  12. IdentityServer4【Topic】之定义资源
  13. 【洛谷U20626】gemo 容斥 FWT 高斯消元
  14. css 文本超出范围显示省略号
  15. 原生js实现级联下拉列表
  16. centos7环境下对防火墙的操作
  17. vim中的ctrl+s导致的“假死”、无响应、不接受输入
  18. HDU3853:LOOPS
  19. 我看微软收购GitHub
  20. thread_indent

热门文章

  1. Delphi中SendMessage使用说明(所有消息说明) good
  2. JSP内建对象
  3. robot framework运行测试 命令行启动
  4. PSAM卡之常用APDU指令错误码【转】
  5. data-toggle data-target
  6. Potentiometers
  7. Notification操作大全
  8. Python print 输出不换行,只有空格
  9. E20171226-hm
  10. redis的持久化的原理介绍和实现