上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 32 下一页
摘要: 树状数组题意:一个树,以树枝连接两个点的形式给出,固定以1为整棵树的根。苹果长在树的节点上,节点上只可能0或1个苹果,一开始每个节点都有1个苹果有两种操作,C表示更改某个节点的苹果数,0变1,1变0。Q表示查询,某个节点(包括)的子树上一共有多少个苹果这题是选拔赛时候的题,一看,单点修改,区间查询?线段树?后来一直没想出来,今天看解题报告才明白真的是,不过是树状数组(不过按照理论来将,凡是树状数组能解决的问题,线段树都可以解决,反之不然)。整个问题最难的时候怎么映射成树状数组,映射后,只是树状数组的模板操作1.首先数据太大,不用显式建树,只是用vector来保存边的信息,仅仅是利用vector 阅读全文
posted @ 2013-04-04 22:22 Titanium 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 树型DP:二叉苹果树另外一个提交地址:http://www.cqoi.net:2012/JudgeOnline/problem.php?id=1375里面有中文题目,不解释题目了。树型DP:主要是两点,怎么建树,怎么DP。这两者应该说是相互制约相互影响的,怎么DP就要怎么建树,而建树方法对不对也决定了你能不能DP。所以先分析怎么DP的,再分析怎么建树题意说要保留m个树枝,而且注意权值不是点的而是树枝的,这样子并不利于我们解决问题,我们可以转化一下,把权值转移给节点。首先给出所有边的信息后,我们的建树是唯一的(这个问题值得思考一下为什么,唯一是指不考虑左右孩子的位置,而只考虑从属关系,好像1(3 阅读全文
posted @ 2013-04-04 17:11 Titanium 阅读(451) 评论(0) 推荐(0) 编辑
摘要: 线段树题意:很明显的线段树。做了这题更加让我注意了用点和用段来建树的区别。这题是用点来表示线段的。一开始从0到10^9这个点之间的线段都是白色的,然后m个更新,每个更新 a,b,col,表示从点a到点b这条线段染成黑色或白色,问最后,白色线段中最长的是哪一段,输出它的位置(即线段两端的端点)注意更新的时候a,b的数值范围是 0<a<b<10^9 , 其实这样给数据方便了处理,否则的话最后要搞一下挺烦的先看看用段和用点表示线段树的区别。用点的话,0,1,表示的长度是1。1,3表示的长度是2。而用段的话1,3表示的长度是3,就是这个意思线段树的建树,无论在何种情况下,应该说建树的 阅读全文
posted @ 2013-04-03 21:34 Titanium 阅读(563) 评论(0) 推荐(0) 编辑
摘要: 并查集题意:题意比较好懂简单说一下。一个序列,只有0,1;输入n,表示序列长度(从1到n标号),输入m,下面m个更新,每行都是a,b,string,表示说序列中下标a到下标b的元素中有偶数个或奇数个1.没得到一个更新就更新序列的信息,知道读入第k个信息,和已建立的信息矛盾,那么结束,输出k-1,表示前面k-1个更新不矛盾,如果m个更新都成立,那么输出m这题要转化一下,一转化就比较明显了。我们定义前缀和为sum[i]表示1到i的和,那么sum[b]-sum[a-1]=c[a]+c[a+1]+c[a+2]……c[b] , 即序列的[a,b]区间和因为序列中只有0,1所以区间和的奇偶性就是该区间拥有 阅读全文
posted @ 2013-04-03 21:11 Titanium 阅读(785) 评论(1) 推荐(0) 编辑
摘要: 网络流UVA 1161 是相同的题目这题网上找不到任何题解的,看上去是个最大流,但是最难搞的就是有时间限制,现在基本上能确定的就是要拆点,但是怎么拆不确定,我用了这种拆法就一直超时超时的原因我总结一下有几个可能。1.构图的代码太烂,可能出了什么差错但是找不出来。2.数组开小了?开大了?3.和第1个原因,然后运行EK的时候掉进了死循环或者效率太慢。4.EK太慢,要用ISAP超时的代码/*原本的点从0到n-1标号,但是每个点需要占用2880个空间,所以对于原来第u个顶点,怎么确定那个范围是它可以用的就是[u*2880 , (u+1)*2880-1]如果读入了点u,时间为t而且它是作为到达时间,那么 阅读全文
posted @ 2013-04-02 19:54 Titanium 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 求解无向图的点连通度,转化为网络流详细的解释明天再写了#include <cstdio>#include <cstring>#include <queue>using namespace std;#define N 60#define min(a,b) a<b?a:b#define max(a,b) a>b?a:b#define INF 0x3f3f3f3fint first[10*N];struct edge{ int u,v,cap,flow,next;}e[N*N*N];int nume;int n,m;void EK(int s ,int 阅读全文
posted @ 2013-03-31 00:23 Titanium 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 线段树求体积并题意来自网上,懒得写了。。。。有一块田,上面有n个矩阵,每个矩阵对应一个权值,矩阵相交的部分取权值大的,问最后能获得多少值我们可以转换一下模型,将权值看成矩阵的高,那么题目就成了n个长方体求并,由于m只有3,所以我们可以枚举高度,在每个高度用扫描线做一次矩阵面积并,最后求和即可,最多只有3次扫描线(想象一下长方体,交错在一次,有高有低,怎么求出整个立体形的体积)注意一点,这题数据还是比较大的,用int很危险,不旦最终答案要__int64,中间的一些乘法是会溢出的,我就是用int,WA了好几次,后来把所有改为__int64就过了#include <cstdio>#inc 阅读全文
posted @ 2013-03-30 01:14 Titanium 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 暴力+模拟题意:一行字符串没有空格,是一个加法或减法算术表达式。数字中有大写字母,大写字母代表了某个数字,一个字母只能代表1种数字,不同字母代表的数字不同,另外允许存在前导0,另外字母总数最多10个。另外题目中说第1个数字要大于等于第2个数字,所以我做了判断,然后wa了一个早上+一个晚上,注释掉就AC了很无语。。。。另外答案可能有多种,任意一种都可以的,至少我的代码是这样,并且保证是有解的。另外这题网上找不到题解的,确实我也觉得这题很无聊。。。但是选拔赛的时候,居然想成了拓扑排序(因为做过类似的,又一次被驴舔了)说说做法吧因为字母最多十个,所以就暴力枚举,可想而知枚举量最大是10!,枚举后就把 阅读全文
posted @ 2013-03-28 23:14 Titanium 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 在朱全民的PPT介绍的一个树型DP经典题,《选课》,中文题目,不结束找了很久找到了可以提交的OJ,重庆八中http://www.cqoi.net:2012/JudgeOnline/problem.php?id=1376简单分析一下:1.建树,不要用一般的孩子表示法,这里要讲森林转为二叉树处理才能强劲有力,所以用(左)孩子(右)兄弟法建树2.建树之后就可以DP,DP的策略写在代码中了,不多说对于树型DP的初步感觉1.建树很重要(跟图论里面构图很重要,构图失败基本上整个算法失败了)2.树这种结构比较特殊,要找到特殊型入手,一是从属关系,即孩子是属于某个双亲的,二是平行关系,兄弟之间是平行的。因而一 阅读全文
posted @ 2013-03-24 18:07 Titanium 阅读(663) 评论(0) 推荐(0) 编辑
摘要: 动态规划黑书的例题,老题了,2000年的国赛题,题意看黑书吧,太长了。。。比较典型的按阶段性决策,整个dp还是不难想的,1A分析在代码中/*按时间决策的DP,或者说按阶段性决策当前要跳的格子出现了,那么怎么跳其实只有两种选择,用左脚去踩或者右脚去踩所以要枚举前一个格子结束的时候,左右脚在什么地方,如果用左脚踩会产生多少花费,用右脚踩会产生多少花费dp[i][l][r]表示踩完第i次,左脚在l这个格子上,右脚在r这个格子上的最小花费那么最终要找的答案在dp[n][l][r]中,所以要扫描一次dp[n]找到最大值由题目的性质就知道可以使用滚动数组,而且题目也没提到序列的长度,所以用滚动数组也更为保 阅读全文
posted @ 2013-03-23 23:08 Titanium 阅读(317) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 32 下一页