拓扑排序
DOFYPXY
这个作者很懒,什么都没留下…
展开
-
[BZOJ4010]菜肴制作 拓扑排序+堆
我一开始就理解成求字典序最小的方案。。。然后果断建图拓扑排序,每次删入度为0的点的时候优先删编号最小的点。。。 先说说这种错误的做法,这种做法并不能保证题目中的最优性,比如当前1号点入度不为0,按照要求,应该把能走到1的所有点(限制1的点)都删去再删1,才能保证1最前,但假如此时2号点入度为0,而2并不能走到1,如果先删2就耽误了删1。怎么办呢?我们发现这样只保证了字典序最小,不能满足题目要求,但原创 2017-09-12 22:16:44 · 266 阅读 · 0 评论 -
[BZOJ2815][ZJOI2012]灾难 拓扑排序+lca
若A能吃掉B,那么B向A连边。建一个虚根连向所有入度为0的点,拓扑排序一发。 考虑这么一棵树,假如某个节点灭绝,那么它的子树也全部灭绝。构造出这样一棵树就好了。 假设拓扑中前k-1项的树已经构造好了,考虑第k项该接在哪。显然,应该接在原图中所有向它有连边的点在树中的lca下。 构造出来统计一发子树大小就行了。 代码:#include<iostream> #include<cstdio> #i原创 2017-10-17 19:20:52 · 340 阅读 · 0 评论 -
[2017纪中11-2]字典序 拓扑排序+优先队列
题面 拓扑排序的时候每次取出最小点就是了。。。 代码:#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<vector> using namespace std; const int maxn=100010; int n,m,rd[maxn],ans[原创 2017-11-02 19:13:13 · 625 阅读 · 0 评论 -
[2017纪中11-5]轰炸 强联通分量+DAG最长路
题面 读清题。。。 考虑一个强联通分量,两两互相可达,那么轰炸掉这个强联通分量至少需要其中点的个数轮。 考虑一条路径,轰炸一条路径需要它的长度轮。 于是tarjan缩点在拓扑排序一下跑一个DAG最长路即可。 代码:#include<iostream> #include<cstdio> using namespace std; const int maxn=1000010; int n,m,原创 2017-11-05 21:21:12 · 319 阅读 · 0 评论 -
[联合集训6-21] 最小拓扑序 贪心
首先可以发现对于每个点vvv最多添加一条边指向它,假设添加了边x→v,y→v(x>y)x→v,y→v(x>y)x\to v,y\to v(x>y) 换成x→y,y→vx→y,y→vx\to y,y\to v不会更劣。 我们贪心选点加入拓扑序。那么考虑当前局面一个入度为000的点的集合,我们会在当前可添加边数允许的情况下,尽可能选择一个编号大的点放入拓扑序,假设我们选择点iii,那么对...原创 2018-06-21 22:16:02 · 307 阅读 · 0 评论