06 2016 档案
摘要:n次最小生成树kruskal 将所有的边排序,权值小的在前。 设排序后第i条边为路径中的最长边,那么这条路径一定是由1~i中的一些边组成 因为最高速和最低速的差尽量小,最高速确定了,最低速应尽量大。 所以j从i downto 1,将边j加入边集,如果此时s和t联通了(s t在并查集的一个集合中),那
阅读全文
摘要:将图反向,从终点spfa,把和终点没有联系的点找出来, 把它们和它们所连接的所有点删去(反向图) 然后再一遍spfa,输出最短路即可 代码:
阅读全文
摘要:先正向从1点出发SPFA,获得min[i],就是到达i点能最低购买到的价格,(起始点到i的路上经过的最小值) 然后反向(将图反向),从n点开始SPFA,获得max[i],就是从i点到终点能够卖出的最大的价格,(终止点到i的路上经过的最大值) 然后就是寻找差价最大的i,输出答案即可。 代码: 一开始疑
阅读全文
摘要:求单源最短路的SPFA算法的全称是:Shortest Path Faster Algorithm,是西南交通大学段凡丁于1994年发表的。 定理: 只要最短路径存在,上述SPFA算法必定能求出最小值。 数据结构: 队列q, 用数组dis记录每个结点的最短路径估计值. vis存是否在队列里 采取的方法
阅读全文
摘要:Floyd 算法保证了最外层循环到 k 时所有顶点间已求得以 0…k-1 为中间点的最短路径。 一个环至少有3个顶点,设某环编号最大的顶点为 L ,在环中直接与之相连的两个顶点编号分别为 M 和 N (M,N < L), 则最大编号为 L 的最小环长度即为 Graph(M,L) + Graph(N,
阅读全文
摘要:所谓传递性,可以这样理解:对于一个节点i,如果j能到i,i能到k,那么j就能到k。求传递闭包,就是把图中所有满足这样传递性的节点都弄出来,计算完成后,我们也就知道任意两个节点之间是否相连。 传递闭包的计算过程一般可以用Warshell算法描述: For 每个节点i Do For 每个节点j Do I
阅读全文
摘要:输入描述 Input Description 输入文件中第一行有两个整数,n 和 m,表示社交网络中结点和无向边的数 目。在无向图中,我们将所有结点从 1 到 n 进行编号。 接下来 m 行,每行用三个整数 a, b, c 描述一条连接结点 a 和 b,权值为 c 的 无向边。注意任意两个结点之间最
阅读全文
摘要:http://tyvj.cn/p/3737 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 秉承伟大军事家的战略思想,作为一个有智慧的军长你,遇到了一个类似的战场局面: 现在有N个城市,其中K个被敌方军团占领了,N个城市间有N-1条公路相连,破坏其中某条公路
阅读全文
摘要:算法思想: 先构造一个只含 n 个顶点、而边集为空的子图,把子图中各个顶点看成各棵树上的根结点,之后,从网的边集 E 中选取一条权值最的边,若该条边的两个顶点分属不同的树,则将其加入子图,即把两棵树合成一棵树,反之,若该条边的两个顶点已落在同一棵树上,则不可取,而应该取下一条权值最小的边再试之。依次
阅读全文
摘要:1.算法思想: 图采用邻接矩阵存储,贪心找到目前情况下能连上的权值最小的边的另一端点,加入之,直到所有的顶点加入完毕。 2.算法实现步骤: 设图G =(V,E),其生成树的顶点集合为U。 (1)把v0放入U。 (2)在所有u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成树。 (3)
阅读全文
摘要:欧拉通路: find_circuit(结点i){ 当结点i有邻居时 选择任意一个邻居j; 删除边(i,j)或者做访问标记; find_circuit(结点j); 输出或存储节点i; } 本题注意点的编号可能是不连续的,处理n为最大的点的编号,以后循环1到n即可(尽管1到n不是每一个都有实际意义,但n
阅读全文
摘要:寻找最小环 vis[i]表示i属于哪个图的连通分量,0表示没有访问过 lev[i]表示在当前连通分量中第几个访问到i的 如果vis[x]==0 继续dfs 否则 如果访问到了上一个联通分量的内容 return 否则 即访问到的本连通分量中已经访问的点,出现环,则用这个环的长度dep-lev[next
阅读全文
摘要:一开始暴搜,超时3个点... 后来看了题解: 首先,两个点的距离为2当且仅当它们都与一个点直接相连 反过来说,一个点所有的出边的终点都是互相距离2的(最大值可以依靠这个方法,前向星处理的时候将每个点的最大出点和次大出点存起来,最后过一遍比较乘积) 那么,所有点对的权值和就是每一个点所产生的点对权值和
阅读全文
摘要:点的序号很大,存不过来,但点数较少,因此用离散化,然后再用并查集。 用map进行离散化,过8个点,2个超时 代码:
阅读全文
摘要:pa[i]代表i的father pre[i]代表i之前有多少个 sum[i]代表i所在的整列有多少个 cc为命令类型,x y为命令参数, fx fy分别为x y的father 当cc==‘M’时,合并x y,因为是把x所在队列放到y所在队列后面,所以要pre[fx]=sum[fy](剩下的pre在f
阅读全文
摘要:开3*n的并查集,其中x用来连接与x同类的,x+n用来连接x吃的,x+2*n用来连接x被吃的。 1 x y时,如果 x吃y 或 x被y吃,那么为假话, 否则x与y同类,x吃的y也吃,x被吃的y也被吃; 2 x y时,如果 x与y同类(x与x自然也是同类) 或 y吃x,那么为假话, 否则x吃y,y被x
阅读全文
摘要:5.3.3.堆排序 堆:设有数据元素的集合(R1,R2,R3,...Rn)它们是一棵顺序二叉树的结点且有 Ri<=R2i 和Ri<=R2i+1(或>=) 堆的性质:堆的根结点上的元素是堆中的最小元素,且堆的每一条路径上的元素都是有序的。 堆排序的思想是: 1)heapdown调整堆:每次调整都是从父
阅读全文
摘要:概念: 树的路径长度:一棵树的每一个叶结点到根结点的路径长度的和。 带权二叉树:给树的叶结点赋上某个实数值(称叶结点的权)。 带权路径长度:各叶结点的路径长度与其权值的积的总和。 哈夫曼树(最优二叉树):带权路径长度最小的二叉树。 如何构建哈夫树:(思想是:权越大离跟越近) 哈夫曼码:哈夫曼树的非叶
阅读全文
摘要:在优先队列中,优先级高的元素先出队列。 标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。优先队列的第一种用法,也是最常用的用法: priority_queue<int> qi; 通过<操作符可知在整数中元素大的优先级高。故示例1中输出结果为:9 6 5 3 2第二种方法:在示例1中,如果
阅读全文
摘要:d[l][i]表示:从第i个珠子开始,连续l个珠子合并后释放的最大能量 状态转移方程d[l][i] = d[j][i] + d[l-j][i+j] + w[i]*w[i+j]*w[i+l],j从1到l-1 注意实际操作时i+j和i+l要mod n. 代码:
阅读全文
摘要:Bfs搜索 1.把棋盘直接作为状态: 测试点#1.in 结果:AC 内存使用量: 488kB 时间使用量: 1ms 测试点#2.in 结果:AC 内存使用量: 1128kB 时间使用量: 3ms 测试点#3.in 结果:AC 内存使用量: 1128kB 时间使用量: 6ms 测试点#4.in 结果:
阅读全文
摘要:康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。 以下称第x个全排列是都是指由小到大的顺序。 公式 X=a[n]*(n-1)!+a[n-1]*(n-2)!+…+a[i]*(i-1)!+…+a[1]*0!
阅读全文
摘要:启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无畏的搜索路径,提到了效率。在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。 估价函数:从当前节点移动到目标节点的预估费用;这个估计就是启
阅读全文
摘要:题目分析:将当前层定义为第h层,共用了n块积木,本层积木数为m,f(h,n,m) 那么可以扩展数两种状态:f(h-1,n-m,m-1),f(h-1,n-m,m+1) 直接搜索可能的数据达到h^m,超时超空间。 通过记录中间状态减少重复计算,同时剪枝:所有n个积木搭h层,每层积木平均数1<x<10,
阅读全文
摘要:dfs搜索每个字母对应的数字 剪枝: 1.当一列上三个数a b c都已知时,如果 (a+b)%n!=c && (a+b+1)%n!=c 剪枝(+1是考量进位,注意&&) 2.考虑到我们根据每排数据剪枝的,我们可以改变一下搜索的顺序,按照字母从上往下,从右往左出现的顺序来搜 3.因为我们是从最低位开始
阅读全文
摘要:1.读入图,边是双向的 2.递归建树,同时确定每一层的节点 3.dfs按层搜索,先把这一层所有被传染的(die[pa[k]]=true的)的die置为true 然后循环,每次把一个die为true的变为false,表示断开这条边,继续dfs dfs的最后记得把这一层die的全部置为false(查了一
阅读全文
摘要:主要是优化搜索顺序 从选择较少的点开始,可以大大提高效率 在search(x,y)找点的时候,对于一个空点(x y),设置一个评分score: score=min{ 横线x上能填的数字个数,竖线y上...个数,所在大方块中...个数 } 选取score最小的点搜索 代码:
阅读全文
摘要:dfs搜索+剪枝 1.原棒可能的长度len:最长的小棒<=len<=所有小棒长度和sum and sum%len==0 2.dfs的参数:len、leftlen当前要拼的原棒剩下的长度、num剩下的小棒的个数、last上层dfs用的小棒序号+1,为避免重复,这次从last向后试探 3.剪枝: 1剪枝
阅读全文
摘要:1710 生日蛋糕(1999 noi) 1999年NOI全国竞赛 题目描述 Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri,高度为Hi的圆柱。当i<M时,要求Ri>R
阅读全文
摘要:Blah数集 大数学家高斯小时候偶然间发现一种有趣的自然数集合Blah,对于以a为基的集合Ba定义如下: (1) a是集合Ba的基,且a是Ba的第一个元素; (2)如果x在集合Ba中,则2x+1和3x+1也都在集合Ba中; (3)没有其他元素在集合Ba中了。 现在小高斯想知道如果将集合Ba中元素按照
阅读全文
摘要:练习:codevs 3066 中缀转后缀 题目描述 Description 给你一个中缀表达式,请你转换成后缀表达式 输入描述 Input Description 一个中缀表达式 输出描述 Output Description 一个后缀表达式 样例输入 Sample Input ((5+7)/3*7
阅读全文
摘要:来自:http://www.cnblogs.com/DSChan/p/4862019.html 题目说找来回两条不相交路径,其实也可以等价为从(1,1)到(n,m)的两条不相交路径。 如果是只找一条,那又回到了最经典的 dp[i][j] = max(dp[i-1][j],dp[i][j-1]) +
阅读全文
摘要:1219 骑士游历 很简单的dp题目,然而却... 最后的结果int越界,而且越了好几圈,最后有越回正数76600068,看起来竟然很正常。。。 这提醒我们一定估算数据大小,对于累加特别是累程的一定注意。 还有多来几组大的测试数据(本题的输入量很少,可以手写测试数据,否则就要另写程序了) 发现在me
阅读全文
摘要:来自http://blog.csdn.net/WhiStLenA/article/details/51585992 重点内容 设F(i,j)为用j个数组成i,答案为F(7,3)的话。 一个思路是,对于F(7,3)=不含1的方案数①+含1的方案数②。 F(i,j)=a(i,j)+b(i,j) 子问题①
阅读全文
摘要:转载自:http://blog.csdn.net/i_dovelemon/article/details/30250049 如何在cocos2d-x中使用ECS(实体-组件-系统)架构方法开发一个游戏? - 博客频道 在我的博客中,我曾经翻译了几篇关于ECS的文章。这些文章都是来自于Game Dev
阅读全文
摘要:转载自:http://blog.csdn.net/i_dovelemon/article/details/27230719 实现 组件-实体-系统 - 博客频道 这篇文章是在我前面文章,理解组件-实体-系统,的基础上进行的。如果你还没有阅读过这篇文章,建议你去看看,这样你就会对这里要实现的内容不会那
阅读全文
摘要:转载自:http://blog.csdn.net/i_dovelemon/article/details/25798677 理解 组件-实体-系统 (ECS \CES)游戏编程模型 - 博客频道 原文出处:点击打开链接 一般来说,我们实现游戏实体都是采用面向对象的方法进行编程。每一个实体都是一个对象
阅读全文
摘要:树状数组 维护一个序列 a1 a2 a3……an 支持两种操作: 1. sum(int a,int b) a~b的区间和 2. add(int x,int d) 第x个数增加d 设lowbit(x)为x的二进制最右边的1表示的值 如lowbit(38288)=lowbit(1001010110010
阅读全文

浙公网安备 33010602011771号