图论
WedsonLin
这个作者很懒,什么都没留下…
展开
-
UVA 658 It‘s not a Bug,it‘s a Feature(单源最短路,Dijkstra)
UVA 658 It’s not a Bug,it’s a Feature(单源最短路,Dijkstra)有n(n<=20)个潜在bug和m(m<=100)个补丁,每个补丁用两个长度为n的字符串表示,分别代表该补丁的前置环境和安装补丁后的状态。在第一个表示前置环境的字符串中,0代表该位对应的Bug可有可无,+表示必须有该Bug,-表示必须没有该Bug;在第二个表示安装补丁后的状态的字符串内,0代表该Bug不变,+表示增加了该位Bug,-表示修复了该位Bug。之前在动态规划中有过用二进制表示原创 2020-09-09 16:30:49 · 138 阅读 · 0 评论 -
UVA 1151 Buy or Build(最小生成树,Kruskal)
UVA 1151 Buy or Build(最小生成树,Kruskal)对于n(1<=n<=1000)个点,q(0<=q<=8)个套餐,如果直接建边并枚举套餐的话,每次Kruskal算法要处理的节点数就会高达O(n2)个,那么整个算法的时间复杂度就高达O(2q n2+n2logn2)。其中O(n2logn2)是排序的时间复杂度。为了降低时间复杂度,可以先通过Kruskal算法在不选套餐的情况下生成最小生成树,那么剩下的边只有n-1个,那么后面只需要处理这n-1条边和套餐里的边,算原创 2020-09-06 10:47:37 · 123 阅读 · 0 评论 -
UVA 12219 Common Subexpression Elimination
UVA 12219 Common Subexpression Elimination解题的第一步显然是构建表达式树,因为题目保证运算符均为二元的,所以该表达式树是一颗二叉树,本题要求建树的时间复杂度为O(n)。故使用pos变量作为指针在字符串上移动,根据’('符号进行递归建树。在对于重复子树的判断上,建议使用unordered_map,unordered_map本质上是一个哈希表,在没有顺序要求的情况下,仅进行简单的查找操作最高可达到O(1)的时间复杂度,这取决于哈希的优秀性。用编码的方式给每个子树赋原创 2020-09-03 19:00:24 · 141 阅读 · 0 评论