树链剖分
文章平均质量分 86
thy_asdf
我也不知道说什么...
展开
-
bzoj3083: 遥远的国度
题意:给定一棵树,支持换根,路径权值覆盖,求子树最小。 思路:求子树?上树链剖分,但是换根怎么办?我们只能通过原有信息推出换根后的答案。换根不影响路径修改,所以只要考虑子树最小值的维护。 这里要分3种情况讨论 1:如果询问点是当前根,直接返回整棵树的最小值。 2:如果在原树中,当前根不在x的子树中,直接返回原树中x的子树最小值。判断x在不在y的子树中,只要通过dfs序即可,如果x的dfs序原创 2015-06-22 21:11:05 · 414 阅读 · 0 评论 -
bzoj2243: [SDOI2011]染色
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 3271 Solved: 1262 [Submit][Status][Discuss] Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点原创 2015-06-22 20:22:14 · 1371 阅读 · 0 评论 -
bzoj2819: Nim
题意:树上的NIM游戏,每次取出一条链,问先手是否有必胜策略。 思路:动态树or树链剖分维护链异或和,为0则没有,否则有。LCT死活就是TLE,代码就不贴了。原创 2015-06-22 20:12:57 · 471 阅读 · 0 评论 -
bzoj1036树的统计Count
单点修改,询问链最大,链和,LCT和树链剖分都可以写,不过LCT就是慢.... LCT: #include #include #include using namespace std; const int maxn=30010; int n,m,u[maxn],v[maxn];char s[7]; struct LCT{ int val[maxn],fa[maxn],c[maxn][2],原创 2015-06-22 19:47:58 · 571 阅读 · 0 评论 -
bzoj4196: [Noi2015]软件包管理器
传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=4196 思路:裸裸的树链剖分。设已安装的为1,未安装的为0。 对于安装操作,就是询问x到0的路径上0的个数,然后把这个路径赋为1 对于卸载操作,就是询问x的子树中1的个数,然后把子树赋为0。 #include #include #include #define ls (p<<1原创 2015-07-25 09:38:57 · 2452 阅读 · 2 评论 -
bzoj3672: [Noi2014]购票
传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3672 思路:思路:首先不考虑树,也不考虑距离限制,假设是链上且无距离限制。 设每个点到根的路径为d[i],两点之间路径长为dist(i,j) 那么DP方程很显然f[i]=min(f[j]+dist(i,j)*p[i]+q[i])(i>j) f[i]=min(f[j]+d[i]原创 2015-12-16 15:13:10 · 666 阅读 · 0 评论 -
bzoj4012: [HNOI2015]开店
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4012 思路:首先我们考虑一个简化的问题: 给定一棵树,每次询问所有点到一个点的距离和。 画个图就能知道:距离和=所有点到根的距离和+点数*u到根的距离-每个点与u的lca到根的距离*2 于是问题就成了求lca的dis和 那么我们先对每个点,把它到根的路径覆盖原创 2015-12-18 12:23:23 · 3417 阅读 · 0 评论