图
tweatherm
这个作者很懒,什么都没留下…
展开
-
二分图的判别与求最大匹配数
判断二分图:染色法**二分图:**只有偶数环没有奇数环的图**算法思路:**未染色的点初始化为-1,将一点染色成0,然后将其连接的点染成1,与染成1连接的点染成0……,以此类推,如果有点将会染成两种颜色则染色失败,改图不是二分图。模板代码实现:int e[M], h[M], nex[M], idx;int color[N];//-1表示没有染色int n,m;//点数与边数void add(int a, int b){ e[idx] = b; nex[idx] = h[a原创 2021-06-16 15:56:55 · 127 阅读 · 1 评论 -
求最小生成树
对于求最小生成树的问题大多都可以用这两种算法解决。朴素prime算法:算法思路:循环n次,每次取出距离生成树距离最小者,加入生成树,用其更新其他的点代码实现:const int N = 1e5+10, INF = 0x3f3f3f3f;bool st[N];//是否在生成树中int dist[N];//到生成树的距离(距离生成树中点的距离最小者)int g[N][N];//邻接举证存边//不存在则返回无穷int prime(){ memset(dist, 0x3f, sizeof.原创 2021-06-13 08:13:18 · 126 阅读 · 1 评论 -
各种最短路问题的求解方式
限制:bellman_ford 和 spfa 可用于判断负环, 其他算法只能用于无负环情况。朴素dijkstra算法(ps: 因为时稠密图,我们用邻接矩阵来存图)设定dist[i]为点i到1的最短距离st[i]为该点的最短距离是否已经确定假设我们要求点1到点n的最短距离先将dist数组初始化为*INF*,*dist[1] = 0*;循环n次每次取出所有点中dist最小的点t,并将其标记st[t] = true通过邻接矩阵用点t来更新其他的点(dist[j] = min(dist[j], .原创 2021-06-05 17:57:17 · 232 阅读 · 0 评论 -
链式前向星简单讲解
链式前向星在效率上介于关系矩阵和邻接表,如果你觉得关系矩阵效率太低,又不想费事去造一个邻接表,那么你就可以选择链式前向星。以起点 终点 权值的例子为例增加边例:1 5 6就是链接1和5权值为6。下面我们以一组数据为例加边5 7//点数为5,7条边1 2 12 3 23 4 31 3 44 1 51 5 64 5 7to[i]表示边i的终点head[i]表示以i为起点的最后一条边,我们将head[]初始化为-1.w[i]表示边i的权值nex[i]表示与边i起点原创 2021-04-16 19:36:00 · 99 阅读 · 1 评论