图论
ACM之图论
YUK_103
随缘更新
展开
-
[单源最短路径]求多条最短路
问题 从1到5一共有几条最短路? 思考 我们思考一下上一篇的代码,发现 for(i=head[now];i!=-1;i=vec[i].nex) { if(dis[vec[i].v] > dis[now] + vec[i].w) { dis[vec[i].v] = dis[now] + vec[i].w; q.push(make_pair(dis[vec[i].v],vec[i].v)); } } 这里只是找到比其小的路径就覆盖并且放入队.原创 2020-10-08 17:48:32 · 549 阅读 · 0 评论 -
[单源最短路径]dijkstra(堆优化)
前言 相信大家对dijkstra普通的方法已经有所了解,不过O(n^2) 的时间复杂度还是让人十分头痛。 由普通的代码可知,我们的时间全部都浪费在遍历寻找最小的边上面,如果我们用一个小根堆去维护那么就可以将查询最小的边的时间压缩到 O(logn) 我的板子: #include <cstdio> #include <cstring> #include <queue> #include <vector> #include <iostream> #d原创 2020-10-08 17:28:47 · 315 阅读 · 0 评论 -
两种建表的方法
直接上代码 邻接表的创立 #include <cstdio> #include <cstring> #include <vector> #include <iostream> using namespace std; int n,m; const int N = 2000000; int head[N]; struct node { int u,v,w,nex; }; vector <node> vec; void addEdge(int原创 2020-09-26 17:43:58 · 382 阅读 · 0 评论 -
[图论+BFS]最小转机
传送门 还是要把题目摘抄一下 第一行输入n , m , start , end , 其中n表示城市数,m表示航线数,start表示起点城市,end 表示终点城市。紧接着输入m行,每行是一条类似a b这样的数据表示城市a和城市b之间有航线,也就是说城市a和城市b之间可以互相到达。 城市a和城市b之间可以互相到达。 存双边 思路 邻接表存图,bfs找终点 上代码 /* Author : yukki Time : 2020.9.21 OJ : aoj Pid : 1952 *原创 2020-09-22 01:08:04 · 377 阅读 · 0 评论