图论
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 · 507 阅读 · 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 · 282 阅读 · 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 · 304 阅读 · 0 评论 -
[图论+BFS]最小转机
传送门还是要把题目摘抄一下第一行输入n , m , start , end , 其中n表示城市数,m表示航线数,start表示起点城市,end 表示终点城市。紧接着输入m行,每行是一条类似a b这样的数据表示城市a和城市b之间有航线,也就是说城市a和城市b之间可以互相到达。城市a和城市b之间可以互相到达。 存双边思路邻接表存图,bfs找终点上代码/*Author : yukkiTime : 2020.9.21OJ : aojPid : 1952*原创 2020-09-22 01:08:04 · 341 阅读 · 0 评论