![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
拓扑排序
超级码力奥
这个作者很懒,什么都没留下…
展开
-
拓扑排序+差分约束:车站分级
原题链接:https://www.acwing.com/problem/content/458/ 这样进行优化的话,从左边走到右边,左边的点到右边的点的距离还是1,但是边的数量从n*m -> n+m 参考详细的题解: https://www.acwing.com/solution/content/17458/ /* 对于每趟列车,不能经过的点到可以经过的点建边。其实就是一个差分约束问题 和奖金那道题挺像的。 由于边的数量可能有很多,这里有一个优化,建一个虚拟的点,先让起点到原创 2022-03-10 10:45:21 · 215 阅读 · 0 评论 -
拓扑排序:可达性统计
原题链接:https://www.acwing.com/problem/content/166/ 图源:https://www.acwing.com/solution/content/32117/ #include <algorithm> #include <bitset> #include <cstring> #include <iostream> #include <queue> using namespace std; const i原创 2022-03-10 09:44:46 · 102 阅读 · 0 评论 -
拓扑排序:奖金
原题链接:https://www.acwing.com/problem/content/description/1194/ /* 反向建图,建立b->a的图,然后求一篇拓扑排序 假设有虚拟源点,刚开始从根节点向下扩展,每个点都是100 然后顺着拓扑序,每个点都需要在父节点的基础上加一, 一个点有可能有多个父节点,要维护一个最大值。 */ #include <cstdio> #include <cstring> #include <io原创 2022-03-10 09:26:17 · 294 阅读 · 0 评论 -
拓扑排序:家谱树
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 110, M = N * N / 2; int n; int h[N], e[M], ne[M], idx; int q[N]; int d[N]; void add (int a, int b) { e[idx] = .原创 2022-03-10 08:59:14 · 362 阅读 · 0 评论 -
拓扑排序 = 拓扑图 = 有向无环图
#include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N=100010; int n,m; int h[N],e[N],ne[N],idx; int q[N],d[N]; void add(int a,int b) { e[idx]=b,ne[idx]=h[a],h[a]=idx++; } bool topsort() { ..原创 2022-03-10 08:48:49 · 165 阅读 · 0 评论