摘要: 树状树组-----转载树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是O(logn)。 在解题过程中,我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 但是不难发现,如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 可以说,每次修改A[i]后,调整前缀和S[]在最坏情况下会需要O(n)的时间。 当n非常大时,程序会运行得非常缓慢。 因此,这里我们引入“树状数组”,它的修改与求和都是O(logn)的,效率非常高。【理论】 为了对树状数组有个形 象的认识,我们先看下面这张图。如图所示,红色矩形表示的数组C[]就 阅读全文
posted @ 2012-09-18 22:18 兴安黑熊 阅读(250) 评论(0) 推荐(0) 编辑
摘要: •//拓扑排序,邻接阵形式,复杂度O(n^2)•//如果无法完成排序,返回0,否则返回1,ret返回有序点列•//传入图的大小n和邻接阵mat,不相邻点边权0•#define MAXN 100•int toposort(int n,int mat[][MAXN],int* ret){• int d[MAXN],i,j,k;• for (i=0;i<n;i++)• for (d[i]=j=0;j<n;d[i]+=mat[j++][i]);• for (k=0;k<n;ret[k++]=i){• for (i=0;d[i]&&i<n;i++);• if (i 阅读全文
posted @ 2012-09-18 22:12 兴安黑熊 阅读(155) 评论(3) 推荐(0) 编辑