题目分析



来源:acwing

分析:
多源汇最短路。所以我们首先想到的是floyd算法, 可是它的复杂度是O(n3)O(n^3)O(n3),会超时。所以我们需要另外考虑。

任意一个点作为起点求出到所有点的最短距离,之后求和。 这个过程要对每个点做一遍。

朴素版dijkstra,做一遍是O(n2)O(n^2)O(n2) ,然后对n个点做,复杂度是O(n3)O(n^3)O(n3),太慢,不能用。

堆优化版的dijkstra,做一遍时间复杂度O(mlogn)O(mlogn)O(mlogn),然后对n个点做,复杂度是O(mnlogn)O(mnlogn)O(mnlogn),可以过!

spfa,做一遍时间复杂度O(m)O(m)O(m),做一遍最坏是O(mn)O(mn)O(mn)这里没卡 .然后对n个点做,复杂度是O(nm)O(nm)O(nm),可以做。

具体写法:

这里用spfa来求每个点作为起点的最短路,然后求和。

spfa需要用到queue,queue取队头的操作是front()

当然也可以用堆优化的dijkstra来做,有时间再写吧。这里是复习一下spfa。

关于spfa的模板题:
最短路[Dijkstra和堆优化的Dijkstra][Bellman-Ford和SPFA][Floyd最短路](更新中)

ac代码

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
const int  N = 810, M  = 3000;//无向边
const int  INF = 0x3f3f3f3f;
int n, p, m;
int id[N]; // 每个奶牛的牧场编号
int h[N],e[M],ne[M],w[M],idx;
int dist[N],q[N];
bool st[N]; // spfa中的判重数组void add(int a, int b, int c){e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++;
}int spfa(int start){memset(dist, 0x3f, sizeof dist);dist[start] = 0;queue<int> q;q.push(start);st[start] = true;while(q.size()){int t = q.front();q.pop();st[t] = false;for(int i = h[t]; ~i; i = ne[i]){int j = e[i];if(dist[j]  > dist[t] + w[i]){dist[j]  = dist[t] + w[i];if(!st[j]){q.push(j);st[j] = true;}}}}int res = 0;// 遍历每头牛在哪儿,然后路径求和for(int i = 0; i < n; i ++){int j = id[i]; // if(dist[j] == INF) return INF;res += dist[j];}return res;
}int main(){cin >> n >> p >> m; // 牛的个数,点数,边数for(int i = 0; i < n ; i++) cin >> id[i]; // 读入每头牛在哪个点memset(h, -1, sizeof h);for(int i = 0; i < m; i ++){int a, b, c;cin >> a >> b >> c;add(a, b, c), add(b,a,c);}int res = INF;for(int i = 1; i <= p; i ++)  res = min(res, spfa(i));//传入起点cout << res << endl;
}

题目来源

https://www.acwing.com/problem/content/1129/

算法提高课-图论-单源最短路的建图方式-AcWing 1127. 香甜的黄油:spfa最短路相关推荐

  1. 算法提高课-图论-单源最短路的建图方式-AcWing 920. 最优乘车:bfs求最短路、建图

    题目分析 来源:acwing 分析: 本题难在抽象建图上,这里采用的建图方式是:同一条公交线路上,前面的站点都可以连一条有向边到其后面的站点,且边权都为1. 由于边权都是1,可以用bfs来求最短路. ...

  2. 算法提高课-图论-单源最短路的综合应用-AcWing 1135. 新年好:dijkstra和dfs暴搜结合

    题目分析 来源:acwing 分析: 先预处理出从1,a,b,c,d,e出发到其他所有点的单源最短路.存在二维数组dist[6][N]中 dfs暴搜所有拜访顺序,共有5!种,对于每一种拜访顺序,可以通 ...

  3. 算法提高课-图论-单源最短路的建图方式-AcWing 903. 昂贵的聘礼:建图巧妙、dijkstra、考虑等级

    题目分析 来源:acwing 由于终点是1号节点,建立虚拟节点S,如下建图(根据样例画图).S出发和每个点直连的边权代表直接买该物品花的金币数:而由S到1的任意一条通路,边权之和就是花费的金币数.所以 ...

  4. 算法提高课-图论-单源最短路的综合应用-AcWing 342. 道路与航线:最短路dijkstra、拓扑排序 、综合题、好题

    题目分析 来源:acwing 分析: 道路:双向,边权非负, 航线:单向,边权可正可负,且无环. 根据题意,点可以分为很多团(连通块),团内部只有道路(道路是双向的,而且是连通的,所以不能存在航线,否 ...

  5. 算法提高课-图论-单源最短路的建图方式-AcWing 1128. 信使:dijkstra、 最短路取最大值

    题目分析 来源:acwing 分析:广播模型,求整个网络所有点都被广播到,需要多少时间. 本题核心:对于每个点来说,它接收到信的时间,是等于它到指挥部的最短距离. 所以,所有点被广播到,就是求指挥部到 ...

  6. 算法提高课-图论-单源最短路的扩展应用-AcWing 1137. 选择最佳线路:多源最短路、虚拟源点

    题目分析 来源:acwing 分析: 本题有多组测试数据,如果对每个源点暴力使用dijkstra,会超时. 好的做法:建立虚拟源点S,让S到所有真实起点的边权为0,这样原问题就可以转换为从虚拟源点S到 ...

  7. 算法提高课-图论-单源最短路的建图方式-AcWing 1126. 最小花费:dijkstra求最长路

    题目分析 来源:acwing 分析: 链条转移:start * (1-w1) * (1- w2) * (1- w3) -(1-wn) = 100,要start最小,则w =(1-w1) * (1- w ...

  8. 算法提高课-图论-单源最短路的建图方式-AcWing 1129. 热浪:dijkstra裸题

    题目分析 来源:acwing 分析: ac代码 朴素的dijkstra() ,时间复杂度O(n2)O(n^2)O(n2) #include<bits/stdc++.h> using nam ...

  9. 算法提高课-图论-有向图的强连通分量-AcWing 367. 学校网络:强连通分量、tarjan算法

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 第一问:通过tarjan算法求出强连通分量并且缩点后,统计入度为0的点的个数p即可. 第二问,至少加几条边才能使图变成强连通分量?这 ...

最新文章

  1. PHP laravel 加模块,php – 如何在Laravel 5中构建模块化应用程序?
  2. Modern C++ Design 学习笔记-第3章
  3. 【机器视觉】 dev_open_dialog算子
  4. ajax请求flask以后得到的响应查看
  5. net.conn read 判断数据读取完毕_1.5 read, write, exit系统调用
  6. mysql-演练0722
  7. isFinite使用说明
  8. matlab的开方算法_matlab最大公约数 三种算法
  9. 微信小程序超链接跳转页面
  10. mysql校对集_MySQL校对集问题的教程
  11. 现在哪里有卖鸡腿面包的?
  12. 【LeetCode】第643题——子数组最大平均数I(难度:简单)
  13. 【电脑配置知识】显卡 GPU
  14. 基于flask的网页聊天室(一)
  15. 阿里实习生内推电面总结
  16. python读取docx文件_Python 实现docx文件的读写操作
  17. ie6、ie7、ie8下支持js 使用vml style.addRule('v\\:line,v\\:stroken',behavior:url(#default#VML);)
  18. 如何优雅地完整的一键卸载腾讯云监控(sgagent barad_agent)
  19. 【JavaWeb实验】图书管理系统
  20. 广安职业技术学院计算机在那个校区,广安职业技术学院有几个校区 哪个更好...

热门文章

  1. Centos mysql的安装和配置
  2. shell 从1加到100
  3. 恢复 root 本地无权限 Access denied for user 'root'@'localhost' (using password: NO)
  4. 关于如何生成随机记录
  5. HP 520 双系统 vista xp
  6. 用神经网络二分类吸引子与排斥子
  7. 基于stm32f107 stm32cube 和 LWIP 协议实现 udp 组播通信
  8. lwip 开发 sntp 与 tcp 不能同时工作的奇怪问题
  9. wsl(windows上运行linux)安装到非C盘解决方案
  10. SFTP连接GCP,向服务器发送文件方法,第三方工具生成密钥对连接GCP服务器(putty生成密钥远程连接服务器)...