随笔分类 -  Acm

上一页 1 2 3 4 5 6 7 8 9 10 ··· 15 下一页
摘要:简单题,看题目就懂。 阅读全文
posted @ 2016-01-15 20:01 sweat123 阅读(238) 评论(0) 推荐(0)
摘要:简单题。 阅读全文
posted @ 2016-01-15 20:00 sweat123 阅读(219) 评论(0) 推荐(0)
摘要:这题我建了2棵线段树,这样来处理 最值和和值,简单的题目。 阅读全文
posted @ 2016-01-15 19:59 sweat123 阅读(136) 评论(0) 推荐(0)
摘要:NEGATE a,b 将a b间的线段取反,这题应该用线段树+成段更新。我成段更新写的挫了,试了暴力修改过了(数据水)。 也是简单的题目。不过要注意点和边的区别。 阅读全文
posted @ 2016-01-15 19:58 sweat123 阅读(145) 评论(0) 推荐(0)
摘要:注意这里都是把边放到线段树中,所以lca的时候,要注意如果top[x]==top[y] && x==y 的时候已经完成了。 仔细想想边和点的不同之处!!! 阅读全文
posted @ 2016-01-15 09:05 sweat123 阅读(173) 评论(0) 推荐(0)
摘要:给你n个点,m条边,p次操作。n个点相连后是一棵树。每次操作可以是x 到 y 增加 z,或者减z,或者问当前点的值是多少。 可以将树分成链,每个点在线段树上都有自己的点,然后线段树成段更新一下。 阅读全文
posted @ 2016-01-14 16:16 sweat123 阅读(127) 评论(0) 推荐(0)
摘要:http://blog.sina.com.cn/s/blog_7a1746820100wp67.html这个博客很好,很清楚。 注意树的边和点有时候是不一样的,仔细想一想。 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103962#ov 阅读全文
posted @ 2016-01-14 14:57 sweat123 阅读(111) 评论(0) 推荐(0)
摘要:#include #include #include #include #include #define INF 99999999 #define ll __int64 using namespace std; const int MAXN = 30; ll dp[MAXN][MAXN]; void init() { int i,j,k; memset(dp,0,sizeof(d... 阅读全文
posted @ 2016-01-08 15:06 sweat123 阅读(116) 评论(0) 推荐(0)
摘要:第一次接触数位dp,对于这种题目,数字都是很大,直接遍历肯定超时,通过对每个位子上数字的遍历可以大大减小复杂度。 dp[i][j]表示1到 i位的以j开头的数有几个满足条件的。这样理解一下,然后求出目标n的位数和各个位上的值,遍历即可。 阅读全文
posted @ 2016-01-08 14:38 sweat123 阅读(209) 评论(0) 推荐(0)
摘要:将几个集合合并,求合并后的集合数的个数。 首先先求出各个集合的数的个数相加,减2个集合的相交的个数,加三个集合相交的个数,减四个集合相交的个数。。。。。 http://www.51nod.com/onlineJudge/problemList.html 容斥原理的简单应用。 阅读全文
posted @ 2016-01-06 16:31 sweat123 阅读(162) 评论(0) 推荐(0)
摘要:好久没更了。前段时间去ec-final,实力水一波,混了个铜,虽然很弱,但是可以算是对之前一段时间的回报吧。 现在每天忙着复习,逃课太多,啥都不会。。。不想挂科啊!!Orz... 题意(简化):警察想抓捕黑手党老大。现在警察们认为黑手党内部是树形结构,每个人看做节点。删除一个节点,这棵树就分为几个连 阅读全文
posted @ 2015-12-30 14:36 sweat123 阅读(392) 评论(0) 推荐(0)
摘要:#include #include #include #include using namespace std; const int MAXN = 110; vectora[MAXN]; int n,m,v[MAXN],vis[MAXN],dp[MAXN][MAXN]; void dfs(int root) { dp[root][1] = v[root]; vis[root] =... 阅读全文
posted @ 2015-12-09 22:05 sweat123 阅读(379) 评论(0) 推荐(0)
摘要:#include #include #include #define INF 999999999 using namespace std; const int MAXN = 210; struct node { int to; int v; int next; }edge[MAXN*3]; int pre[MAXN],n,index,vis[MAXN],m,num[MAX... 阅读全文
posted @ 2015-12-06 15:38 sweat123 阅读(144) 评论(0) 推荐(0)
摘要:想法:对于一棵树,对于任意一个节点,它的最大值可以来自以它为根的子树,也可以来自它的父亲。所以需要考虑二个方向的情况。所以必须考虑2个方向。解法:dp[i][0]保存子树的值,dp[i][1]保存父亲结点方向+dis[i,root];可以先一遍dfs,保存任意点子树的最大值,同时保存任意点取最大值的 阅读全文
posted @ 2015-12-04 20:01 sweat123 阅读(164) 评论(0) 推荐(0)
摘要:树形dp入门,在树上进行dp。 状态转移方程: dp[i][0] = max(dp[j][0], dp[j][1]);//i为j的上司 并且i不来 dp[i][1] = dp[j][0];//i来了 用vector实现 rt表示树。 阅读全文
posted @ 2015-12-03 16:22 sweat123 阅读(115) 评论(0) 推荐(0)
摘要:简单。 阅读全文
posted @ 2015-11-22 16:22 sweat123 阅读(231) 评论(0) 推荐(0)
摘要:水,坑。 阅读全文
posted @ 2015-11-22 16:04 sweat123 阅读(156) 评论(0) 推荐(0)
摘要:一想到xor还要求最大类似的题,字典树效率高。 此代码c++ TLE。 阅读全文
posted @ 2015-11-10 16:05 sweat123 阅读(167) 评论(0) 推荐(0)
摘要:用字典树思想来做。对于一个数,给出他的二进制,然后更具二进制建立字典树,然后每次询问的时候的数也给出二进制,如果当前为1,那就向0走,为0,向1走。 阅读全文
posted @ 2015-11-10 14:21 sweat123 阅读(173) 评论(0) 推荐(0)
摘要:prim方法:先求过一遍prim,同时标记使用过得边。然后同时记录任意2点间的最大值。 每次加入一条新的边,会产生环,删去环中的最大值即可。 阅读全文
posted @ 2015-11-09 00:39 sweat123 阅读(188) 评论(0) 推荐(0)

上一页 1 2 3 4 5 6 7 8 9 10 ··· 15 下一页