随笔分类 - ACM
大二到大三不堪回首的记忆....
摘要:考察: dijkstra+枚举 思路: 先看最短路端点有无答案,再看边上有无答案. 对于每一条边,我们需要找它的最短路径有无答案. 需要分类讨论: 一条边的a,b端点.如果a的最短距离>=d,那么肯定没有a的答案.同理b 如果a端点小于d,b端点>=d.且dist[a]+len>d那么肯定有a的答案
阅读全文
摘要:原题链接 考察:拓扑排序+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此题 易错: 数据好像有重边,但拓扑排序
阅读全文
摘要:原题链接 考察:dfs+素数 这道题在hdu和uva都有,但是相较uva,hdu的数据明显弱了.就算改了输出格式,相同代码在UVA是WA,而在HDU可以AC 当N<=16,数组不能只开到30,因为最大是16+15=31 这道题没怎么想直接看了lrj老师的代码...下次还是要认真想啊!!!! 思路:
阅读全文
摘要:原题链接 考察:bfs WA了n次结果发现是m写成了n真是无极鲅鱼 思路: 两次bfs,分别统计他们到地图上每一个点的最小时间,在KFC处取最小值即可 不知道能不能让他们同时走,这种写法我不会 易错: 存在他们不能到达的KFC,所以不能简单地只考虑最小值 1 #include <iostream>
阅读全文
摘要:原题链接 考察:bfs+一点技巧 很明显是要人和火一起bfs,但是这道题我不知道怎么区分本次的火和下一时间的火,于是这道题就没做出来... 看了大佬代码后的思路: 当火开始bfs的时候,用变量记录火队列的大小,此时的while条件不是!fq.empty()而是sz--当sz==0时退出,同理人 这里
阅读全文
摘要:原题链接 考察:bfs 原思路: 在纸上模拟后,得出需要去重的结论.本来是利用pair存储,map去重顺便记录步数.但是这样没办法储存路径.后来想用map<pii,vector<string> > 存储经历的字符串.但是这样每次得到的新结点又会是新的vector,然后就卡此处没做出来 看大佬代码后思
阅读全文
摘要:原题链接 不想写也不会写的题 考察:素数+bfs 思路: 将每一位的数字改变判断是否出现过并且是否为素数,如果是就纳入队列 错误原因: 上面的思路是很容易想到的,但是后半段我忘了bfs是一步步到达目标的,所以暂时符合要求的就先纳入,再一步步走看是否能到终点 1 #include <iostream>
阅读全文
摘要:原题链接 考察:dfs或者bfs 暴力枚举即可,没有什么特别的技巧 dfs:找到了就标记一下,避免继续搜索(因为答案一定在long long里,所以超过18位就可以不用算了) bfs:用G++编译,找到当即退出.注意一定要让所有路径都有返回值否则报错 1 #include <cstdio> 2 #i
阅读全文
摘要:原题链接 考察:一点点位运算+枚举+递推 好像也可以用广搜写,但这里有个技巧真心妙 易错: 矩阵要求的字典序是从右往左最小 从Y总来的思路: 当我们确定第一行的状态时,第二行要必须灭掉第一行的1,再因为我们需要最短次数.根据第二行,我们就确定了第三行的状态,以此类推.所以我们确定了第一行的状态就确定
阅读全文
摘要:原题链接 考察:bfs 稍微思考一下就知道dfs会超时,但是这道题我还花了很多时间仔细思考了第一次达到新的点是不是最短时间 动笔才是王道啊!!! 易错: 我写的判断条件是超出k的两倍就不考虑此点,实际上k可能比n小,这样会WA 1 #include <iostream> 2 #include <qu
阅读全文

浙公网安备 33010602011771号