上一页 1 2 3 4 5 6 ··· 12 下一页
摘要: (1)使用vector之前必须包含头文件:#include(2)namespace std{ template > class vector; }vector的元素可以是任意类型T,但必须具备assignable和copyable两个性质。第二个template参数可有可无,用来定义内存模型,缺省的模型是C++标准程序库提供的allocator。(3)在末端附加或删除元素时,vector的性能相当好。可是如果你在前端或中部安插或删除元素,性能就不怎么样了,因为操作点之后的每一个元素都必须移动到另一个位置,而每一次移动都得调用assignment操作符(4)vec... 阅读全文
posted @ 2013-08-28 15:59 一生挚爱 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 树状数组是对一个数组改变某个元素和求和比较实用的数据结构。两中操作都是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 @ 2013-08-28 10:19 一生挚爱 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个图,求从1到N的递增边权的最短路。解法:类似于bellman-ford思想,将所有的边先按照权值排一个序,然后依次将边加入进去更新,每条边只更新一次,为了保证得到的路径是边权递增的,每次将相同权值的边全部取出来一同更新,每条边能够更新的前提是某一个端点在之前被更小的边权更新过。另外一个要注意的地方就是一次相同边的更新中,要把所有的更新暂存起来最后一起去更新,这样是为了防止同一权值的边被多次加入到路径中去。#include #include #include #include #include #include using namespace std;typedef __int64 阅读全文
posted @ 2013-08-27 20:18 一生挚爱 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 2012-01-30 18:06:16|分类:程序|字号订阅在北京冬令营的时候,yby提到了“带花树开花”算法来解非二分图的最大匹配。于是,我打算看看这是个什么玩意。其实之前,我已经对这个算法了解了个大概,但是。。。真的不敢去写。有一个叫Galil Zvi的人(应该叫计算机科学家),写了篇论文:Efficient Algorithms for Finding Maximal Matching in Graphs(如果你在网上搜不到,可以:http://builtinclz.abcz8.com/art/2012/Galil%20Zvi.pdf)这篇论文真神啊,它解决了4个问题:(一般图+二分图) 阅读全文
posted @ 2013-08-23 17:04 一生挚爱 阅读(983) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #include #include using namespace std;const int maxn = 16100;struct node { int v,next;} edge[41000];int head[maxn],sta[maxn],vis[maxn];int id,top,n;void add_edge(int u,int v){ edge[id].v = v;edge[id].next = head[u];head[u] = id++;}int dfs(int u){ if( vis[u^1] )r... 阅读全文
posted @ 2013-08-19 15:29 一生挚爱 阅读(157) 评论(0) 推荐(0) 编辑
摘要: #include#include#include#include#include#includeusing namespace std;int const oo = 100000000;int cost[103][103]; // 花费=边 int used[103][103]; // 表示这条边是否在生成树中 int father[103]; // 生成树中点的 int maxlen[103]; // 表示i点到根的路径上除了与根直接相连的边外,边权最大的边的边权。int vis[103]; // 标记 int d[103]; // 求最... 阅读全文
posted @ 2013-08-14 17:20 一生挚爱 阅读(270) 评论(0) 推荐(0) 编辑
摘要: =============== 分割线之下摘自Sasuke_SCUT的blog=============最 小树形图,就是给有向带权图中指定一个特殊的点root,求一棵以root为根的有向生成树T,并且T中所有边的总权值最小。最小树形图的第一个算法是 1965年朱永津和刘振宏提出的复杂度为O(VE)的算法。 判断是否存在树形图的方法很简单,只需要以v为根作一次图的遍历就可以了,所以下面的 算法中不再考虑树形图不存在的情况。 在所有操作开始之前,我们需要把图中所有的自环全都清除。很明显,自环是不可能在任何一个树形图上的。只有进 行了这步操作,总算法复杂度才真正能保证是O(VE)。 首先为除根之外 阅读全文
posted @ 2013-08-14 15:32 一生挚爱 阅读(394) 评论(0) 推荐(0) 编辑
摘要: HDU4283You Are the One区间dp,记忆话搜索运行时间:#include #include #include using namespace std;const int maxn = 105,inf = 1 e)return 0; if(dp[s][e][k] != inf)return dp[s][e][k]; for(int i = s; i #include #include using namespace std;const int maxn =105;const int inf = 1#include #define Max(a,b) (a)>(b)?(... 阅读全文
posted @ 2013-08-12 09:53 一生挚爱 阅读(239) 评论(0) 推荐(0) 编辑
摘要: #include #include #include #include using namespace std;const int maxn = 130;struct node{ bool flg; int id; node *next[maxn],*fail; void Node(){ fail = NULL; flg = false; memset(next,NULL,sizeof(next)); }}arr[500000],*que[500000];int vis[505],num[10],cnt;char str[... 阅读全文
posted @ 2013-08-08 23:42 一生挚爱 阅读(154) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/niushuai666/article/details/7002823#include #include #include using namespace std;struct node{ int count; node *next[26],*fail; void Node(){ count = 0;fail = NULL; memset(next,NULL,sizeof(next)); }}arr[300005],*que[500005];char str[1000006];int cnt = 0;... 阅读全文
posted @ 2013-08-08 23:41 一生挚爱 阅读(166) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 12 下一页