上一页 1 ··· 4 5 6 7 8 9 10 11 12 13 下一页
摘要: 题意:对于一个整数序列,每次指令为a b c,表示序列中从第a项加到第b项的和为c。若某条指令与前面指令所传达的信息矛盾,则视为该指令错误,否则视为该指令正确。给出一串指令,问错误指令的数量为多少。解法:类似POJ 1182 食物链。用并查集做,每个节点有两个参数,比如对于节点x,一个是f,表示其根节点的编号;另一个是r,表示前x项之和减去前x.f项之和的差值。然后判定就好了。tag:并查集 1 /* 2 * Author: Plumrain 3 * Created Time: 2013-11-28 08:32 4 * File Name: DS-HDU-3038.cpp 5 */... 阅读全文
posted @ 2013-11-28 14:41 Plumrain 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 题意:对一个只由1和0组成的字符串,给出指令,a b even/odd,表示字符串中第a位到第b位之间的1的个数为even/odd(偶数/奇数)。给出m个指令,a,b 7 #include 8 #include 9 #include 10 #include 11 12 using namespace std; 13 14 #define PB push_back 15 16 struct temp{ 17 int a, b; 18 bool x; 19 char s[10]; 20 }; 21 22 struct node{ 23 int... 阅读全文
posted @ 2013-11-28 01:06 Plumrain 阅读(544) 评论(0) 推荐(0) 编辑
摘要: 题意:商场卖东西,每种商品有两个属性,一种是价格pi,另一种是保质期di,每种商品只能在天数 7 #include 8 #include 9 #include 10 11 using namespace std;12 13 typedef pair pii;14 15 int n, f[10005];16 pii a[10005];17 18 bool cmp(pii a, pii b)19 {20 return a.first > b.first;21 }22 23 int find(int x)24 {25 if (x != f[x]) f[x] = find(f[x]... 阅读全文
posted @ 2013-11-27 15:40 Plumrain 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 题意:罪犯有两个帮派,有两种命令,D a b,a,b表示罪犯的编号,这句话表示a和b来自不同的帮派。A a b,a,b表示罪犯的编号,这句话是问你a和b是否来自同一个帮派,可以有三种回答,“目前不确定“,”是“,”不是“。罪犯最多10^5个,命令最多10^5个。解法:并查集基础题。用一个struct node表示每一个罪犯,node.f表示该罪犯的父亲节点,node.r表示该罪犯与父亲节点对应的罪犯的关系(0表示来自同一个帮派,1表示不同)。然后写find函数注意更新node.r就行。具体见代码吧。Ps:另外,本题是POJ 1182的简化版,题解见POJ 1182 食物链。tag:并查集 1 阅读全文
posted @ 2013-11-26 09:47 Plumrain 阅读(650) 评论(0) 推荐(0) 编辑
摘要: 题意:中文题,不翻译了。http://poj.org/problem?id=1182解法:并查集的基础题,好题。在之前我还做过POJ 1861,2524,1611三道水题,算是为了并查集入门。不过,现在做完1182才觉得,只要认真地把1182搞懂了,并查集这个知识点就真的完全搞懂了。 不过,这道题我觉得还是有一定难度的,可以考虑先做它的简化版,POJ 1703。题解见POJ 1703 Find them, Catch them(附题目翻译)。 本人智商有限,一直没有搞出来,看得别人的题解。(只看代码部分就能看懂,有大量注释)http://blog.csdn.net/spark_007/... 阅读全文
posted @ 2013-11-26 00:43 Plumrain 阅读(1005) 评论(0) 推荐(0) 编辑
摘要: 题意:有n个点,部分点之间可以连接无向边,每条可以连接的边都有一个权值。求一种连接方法将这些点连接成一个连通图,且所有连接了的边中权值最大的边权值最小。解法:水题,直接用Kruskal算法做一遍就行了,不过还是应该仔细想想为什么Kruskal可行。原因是,在从小边往大边遍历的过程中(一直保持图为连通图),若判定某边i必须被连接,则因为图是连通图,所以连接比它小的边不可能使边i不需要连接,所以,要使边i不需要连接,必须连接比它大的边,根据题目要求,还是连接边i情况更优。tag:最小生成树 1 /* 2 * Author: Plumrain 3 * Created Time: 2013-1... 阅读全文
posted @ 2013-11-24 22:34 Plumrain 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 题意:有一颗苹果树,每个节点上有一些苹果,任何两个节点之间的距离都为1,每走一步距离都增加1,无论该边有没有被走过。问,在最多走k步的情况下,最多能吃到多少个苹果。解法:设d[x][i][0]表示在以x为根的树上,最多走i步,并且最终回到节点x所能吃到的最多的苹果数。 设d[x][i][1]表示在以x为根的树上,最多走i步,并且最终不需要回到节点x所能吃到的最多的苹果数。注意到,一定有d[x][i][1] >= d[x][i][0]。 易得d[x][i][0] = max(d[x][i][0], d[x][i-j-2][0] + d[y][j][0]),其中y为所有x的子节点。 ... 阅读全文
posted @ 2013-11-23 23:13 Plumrain 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 题意:给一棵含有n个节点的树,问最少切割多少条边,能够得到一棵恰好包含p个节点的子树。解法:设d[x][i]表示以x为根的子树,切割出含有i个节点的子树最少需要切割多少条边。对于每个子节点y,可以直接将其切掉,也可以对以y为根的树进行切割,然后给以x为根的树增加节点数。这个地方其实就是一个背包,好好体会。 状态转移方程为d[x][i] = max(d[x][i]+1, d[x][i-j] + d[y][j])。 注意枚举的时候要逆序,否则要多开一维数组。tag:树形dp, 背包 1 /* 2 * Author: Plumrain 3 * Created Time: 2013-1... 阅读全文
posted @ 2013-11-23 23:00 Plumrain 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 题意:一只蜗牛,它的房子在树上的某个叶子节点上,它要从树的根节点出发,寻找自己的房子。树的任意两个节点的距离为1,房子出现在每个叶子节点上的可能性一样。有的节点上有虫子,如果有虫子,虫子会告诉蜗牛它的房子是不是在这个节点为根的子树上。求蜗牛所走距离的最小期望。 如下图,如果蜗牛制定的策略先到2,再到5再到4,则由于房子地点的不确定,所以可能走的距离为1,4,6,所以期望为11/3。如果制定的策略是先到3,根据虫子的话判断去4和5还是去2,则可能走的距离为2,4,3,所以期望为9/3 = 3。可以证明,最小的期望即为3。解法:首先,设叶子节点总数为tt,则肯定会有tt种情况,所以只需要求出所.. 阅读全文
posted @ 2013-11-23 22:45 Plumrain 阅读(555) 评论(0) 推荐(1) 编辑
摘要: 我果然是题短了就能做得好- -。Div 2的三道题都短,于是迅速的过掉了250和500,rating涨了150^ ^。Div 2 250pt题意:给一个vector A,对其中任意的数x,可以将其变为2^t * x(t为正整数),判断能不能将A变为所有数全部一样。解法:我的方法是,将A排序,对第i个,while(A[i] 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include 20 #include 21 #include 22 23 using namesp 阅读全文
posted @ 2013-11-23 01:26 Plumrain 阅读(231) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 13 下一页