题意:无向图中有n个结点,m条边。需要求出所有结点之间最短路之和(若是两个结点间不能到达那么算成是x)例:n=2时 ans = d(1,1)+d(1,2)+d(2,1)+d(2,2)。然后从图中随机拿去一条边然后在让你计算所有结点之间最短路之和,问你可能得到的最大值是什么?

思路:这道题正解是要求出最短路树,但是给出一种更简单的做法就是spfa暴力。当时抱着试一试的思想写了一发,结果没想到就过了,然后速度在2s左右,还算可以。先算出所有点与点之间的最短路,然后在枚举删除边求最短路最大值就可。

代码如下:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <cmath>
 6 #include <algorithm>
 7 #include <queue>
 8 #include <stack>
 9 #include <vector>
10 #define MP(a, b) make_pair(a, b)
11 #define PB(a) push_back(a)
12
13 using namespace std;
14
15 typedef long long ll;
16 typedef pair<int ,int> pii;
17
18 const ll INF = 0x3f3f3f3f3f3f3fLL;
19 const double eps = 1e-6;
20 const int LEN = 110;
21
22 vector<pii> Map[LEN];
23 int n, m, l, u[1010], v[1010], w[1010];
24 ll dis[LEN][LEN], lans, ans;
25
26 void SPFA(int s, int a, int b, int c){
27     deque<int> q;
28     int vis[LEN] = {0};
29     for(int i=1; i<=n; i++)dis[s][i] = INF;
30     dis[s][s] = 0;
31     q.push_back(s);
32     vis[s] = 1;
33     while(!q.empty()){
34         int nv = q.front(); q.pop_front();
35         for(int i=0; i<Map[nv].size(); i++){
36             int x = Map[nv][i].first, y = Map[nv][i].second;
37             if((a==nv && b==x && c==y) || (a==x && b==nv &&c==y))continue;
38             if(dis[s][x]>dis[s][nv]+y){
39                 dis[s][x] = dis[s][nv]+y;
40                 if(!vis[x]){
41                     vis[x] = 1;
42                     if(!q.empty()){
43                         if(dis[s][x]>dis[s][q.front()])q.push_back(x);
44                         else q.push_front(x);
45                     }else q.push_back(x);
46                 }
47             }
48         }
49         vis[nv]=0;
50     }
51 }
52
53 int main()
54 {
55 //    freopen("in.txt", "r", stdin);
56
57     while(scanf("%d%d%d", &n, &m, &l)!=EOF){
58         for(int i=0; i<=n; i++)Map[i].clear();
59         for(int i=0; i<m; i++){
60             scanf("%d%d%d", &u[i], &v[i], &w[i]);
61             Map[v[i]].PB(MP(u[i], w[i]));
62             Map[u[i]].PB(MP(v[i], w[i]));
63         }
64         lans = 0;
65         for(int i=1; i<=n; i++){
66             SPFA(i,-1,-1,-1);
67             for(int j=1; j<=n; j++){
68                 if(dis[i][j]!=INF)lans += dis[i][j];
69                 else lans+=l;
70             }
71         }
72         ans = 0;
73         for(int i=0; i<m; i++){
74             ll loc = 0;
75             for(int j=1; j<=n; j++){
76                 SPFA(j,u[i],v[i],w[i]);
77                 for(int k=1; k<=n; k++){
78                     if(dis[j][k]!=INF)loc += dis[j][k];
79                     else loc+=l;
80                 }
81             }
82             if(loc>ans)ans = loc;
83         }
84         printf("%lld %lld\n", lans, ans);
85     }
86     return 0;
87 }

View Code

转载于:https://www.cnblogs.com/shu-xiaohao/p/3504964.html

uva 1416 (SPFA) **月赛第E题的原题**相关推荐

  1. 计算机二级考试题是题库随机抽吗,计算机二级题目是题库原题吗,计算机二级题目是随机抽的吗...

    计算机二级题目是题库原题吗,计算机二级题目是随机抽的吗 2021-04-2011:07:30 来源: 作者:wangziyang office的话选择题不用看的,三道操作题都是原题.学完选择题要花很多 ...

  2. 背包好题(原题链接+题解

    本质 从一堆物品中选择一些物品,满足某些条件,求选择的最大值/最小值/方法数 有几种限制条件就有几维,先枚举物品再枚举其他的限制条件,对于01背包来讲剩下的限制条件需要从大到小枚举以防重复选择 质数拆 ...

  3. 远程教育英语计算机统考试题,2020年远程网络教育计算机应用基础统考题库原题真题(完整版)...

    一.单选题 1.世界上第一台电子数字计算机采用的电子器件是______. A.大规模集成电路 B.集成电路 C.晶体管 D.电子管 答案:D 远程教育.网络教育大学英语B.计算机应用基础,整套题库,整 ...

  4. 全国计算机三级考试网络技术考过指南(一周就够了),知识点大全以及题库原题易错题补充

    计算机三级考试网络技术考过指南 https://blog.csdn.net/qq_36829091/article/details/100593147 本篇文章是在上文基础上做的补充,主要针对其中的第 ...

  5. 全国计算机二级考试操作题是原题吗,2017全国计算机二级office考试操作题

    2017全国计算机二级office考试操作题 每一代的 Microsoft Office 都有一个以上的版本,每个版本都根据使用者的实际需要,选择了不同的组件.下面小编整理的关于全国计算机二级offi ...

  6. 大学计算机vb考试有题库原题吗,大学VB考试题库

    <大学VB考试题库>由会员分享,可在线阅读,更多相关<大学VB考试题库(77页珍藏版)>请在人人文库网上搜索. 1.大学VB考试题库一.单项选择问题1.与传统编程语言相比,Vi ...

  7. 计算机二级柏林是第几套,2019年计算机二级Office考试内容及时间安排(内附两套原题库)...

    原标题:2019年计算机二级Office考试内容及时间安排(内附两套原题库) 选择题(20分).操作题(80分).考试时长:120分钟 选择题:建议5-10min.Word Excel PPT 各25 ...

  8. UVA 1416 最短路

    UVA 1416 题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=sh ...

  9. Day5.牛客网剑指offer 67题之43-54题(java代码)

    文章目录 Day5.牛客网剑指offer 67题之43-54题 43.左旋转字符串 44.翻转单词顺序列 45.扑克牌顺序 46.孩子们的游戏 47.求1+2+...+n 48.不用加减乘除做加法 4 ...

最新文章

  1. AlphaCode惊世登场!编程版“阿法狗”悄悄参赛,击败一半程序员
  2. 拖慢操作系统启动的8个真实原因
  3. Scala变量和常量
  4. python在财务领域的应用-浅谈财务智能化在实际工作中的运用
  5. 【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程
  6. Django——2 路由分配设置 re_path正则匹配 include总路由 url传参 name使用 模板渲染render方法 模板渲染方法...
  7. Java面试必问JVM调优,那.NET5呢?
  8. 今晚包饺子吗?会露馅的那种......
  9. Oracle数据库备份与还原命令 -- exp/imp
  10. tidyverse —— tidyr包
  11. html中如何改变鼠标样式,HTML中常用鼠标样式
  12. 关于微信授权获取昵称含Emoji表情引发的乱码问题总结
  13. 通过ScrollView实现滚动效果
  14. 论文阅读“Automatic detection of hardhats worn by construction personnel”
  15. docker学习笔记(四)使用docker搭建环境
  16. VS Code 常用快捷键代码大全
  17. 乐高计算机游戏泡泡龙的目标,乐高游戏教案
  18. Python 优雅地利用两点经纬度计算地理空间距离
  19. 苹果IOS修改定位2-IAP2协议修改
  20. FLANN (1.9.2)源码编译

热门文章

  1. 区块链开发: 2019年及以后数字货币的前景如何?
  2. JAVA学习资源网站
  3. 5、Scala模式匹配
  4. C# 如何在PDF文档中创建表格
  5. win7找回丢失的右键新建记事本选项
  6. 数组中只出现一次的数字
  7. Activiti 5.1.4最佳实践
  8. 如何把字符串类型转换成整型?
  9. SUSE LINUX下文件系统变只读的问题解决
  10. TurboMail荣获2010年度优秀电子邮件产品殊荣