随笔分类 - ACM / 拓扑排序
摘要:原题链接 考察:拓扑排序,思维 思路: 2-->1的时间等同于1-->2 >3的时间,也就是说往回走与正向走耗时相同.说明我们可以按1-->2-->3 >1的顺序走即可.枚举起点,再用拓扑排序算时间 ##Code #include <iostream> #include <cstring> #inc
阅读全文
摘要:原题链接 考察:拓扑排序 思路: 不难,暴力建边+拓扑排序,impossible条件是出现环或者,比较长度时,长的排在短的前面. ##Code #include <iostream> #include <cstring> #include <algorithm> #include <queue> u
阅读全文
摘要:原题链接 考察:拓扑排序+并查集 错误思路: 离线处理,$d[i]$记录i的入度.如果$d[i]<=1$就不纳入并查集,否则就加入. 错误原因: 删除一个点,可能使别的点$d[i]<=1$ 思路: 因为$d[i]$是会级联影响的,所以我们用拓扑排序求$d[i]<=1$的点.但是注意题目是无向边,我们
阅读全文
摘要:原题链接 考察:拓扑排序 思路: 等级低与等级高之间建立边.比如区间[1,6]之间停靠了(1,3,5,6).那么在(1,3,5,6)与(2,4)之间两两间加一条边.最后拓扑排序即可. 但是这样会TLE.时间复杂度O(109),空间复杂度极限O(500*500*1000).需要进一步优化. 但是注意初
阅读全文
摘要:原题链接 考察:拓扑排序 思路: 求拓扑序列,然后从尾到头遍历每个点能到达的点,ans[u] |= ans[子结点1]|ans[子节点2]|ans[子节点3]... 因为需要用到或操作所以考虑位运算,如果每位每位或运算时间复杂度是O(nm),只能用bitset优化,bitset底部用int实现,将n
阅读全文
摘要:原题链接 考察:拓扑排序+dfs 我觉得这道题最难的是理解题目... 这道题的字母是随机使用,不一定按顺序 思路: 我们先要在相片中找到各字母的边框.这里只能暴力查找.找到后遍历边框如果边框不是该字母,说明此字母是下面的边框.利用拓扑排序加边即可. 比较难的点是dfs遍历拓扑排序.本蒟蒻是看了别人的
阅读全文
摘要:原题链接 考察:拓扑排序 错误思路1: 先找到字典序最小的拓扑序列,再挨个赋值. 这个思路错在这道题需要的不是字典序最小的序列.而是字典序小的位置尽量靠前的序列.也就是说1 2 3...的位置要尽量考前.序号越小优先级越高 正确思路: 这道题需要保证1 2 3...拓扑序列的位置应该尽量小.也就是说
阅读全文
摘要:原题链接 考察:拓扑排序 不会写orz,蒟蒻本蒻了.完全不能从题目抽出模型来 这道题是x、y、z轴三个拓扑序列. 根据操作进行加边,要注意的是I操作要求的是x的最大坐标大于y的最小坐标.而x与y的关系并没有约束.画了一下图大概是因为y可以包括x 易错: 初始边注意不能根据操作加,如果有盒子不在操作里
阅读全文
摘要:原题链接 考察:并查集+拓扑序列+离线处理 难点在于并查集如何运用,我是卡在如何判断条件不足那里卡了很久.拓扑序列处理不了等号问题.如果用队列中无根结点的元素>2来判断条件不足的话,也存在相等利用序号大小排列名次的问题.因此这题就没写出来... 错误思路1: 利用并查集判矛盾,利用拓扑序列判断是否无
阅读全文
摘要:原题链接 考察:拓扑排序+逆向思维 看来之前的反向并查集还是要补一下,这道题同样是利用逆向思维,再次碰到我还是不会写 思路: 这道题如果按正常的拓扑序列做,就难以得到正确答案,因为入度相同的点不一定都必须是同一报酬.但是如果我们将序列反转,那么求答案就容易得多.这样入度相同的点也不必是同一报酬.这些
阅读全文
摘要:原题链接 考察:拓扑排序(?) 这道题压根不用判断是否成环如果判断了反而是错的(WA了3次),只需要判断入度==0的点是否只有一个就行 易错: 判断成环 这组测试数据证明这个是错的 a b,b c,c b 这只是说明bc不能当冠军,但是a可以 反复提醒:迭代器元素是pair,如果要用first se
阅读全文
摘要:原题链接 考察:拓扑排序 思路: 如果没有按字典序最小的输出就可以直接套模板,但是要求字典序最小.首先想到队列里的元素一定是没有入度的点,当这些点在队列中说明前面已经确定好顺序了.而队列里的点的顺序是不会改变拓扑序列的性质.因此可以用大根堆或者sort排序AC此题 易错: 数据好像有重边,但拓扑排序
阅读全文