动态树
文章平均质量分 81
thy_asdf
我也不知道说什么...
展开
-
bzoj 2049 洞穴勘测
#include #include #include using namespace std; const int maxn=10010; int n,m;char s[10]; struct node{ int c[maxn][2],f[maxn],rev[maxn]; bool isroot(int x){return (c[f[x]][0]!=x)&&(c[f[x]][1])!=x;}原创 2015-06-22 17:36:24 · 510 阅读 · 0 评论 -
bzoj3779: 重组病毒
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3779 思路:RELEASE操作怎么给人一种access的感觉呢? “如果新变种在感染过程中尚未销毁过这类旧变种,需要先花费1单位时间分析旧变种,才能销毁” 这不就是到根统计虚边条数+1吗 继续看下去 RECENTER好像就是换根,换完了正好要access一下 REQUEST询问子原创 2016-02-28 17:36:28 · 1389 阅读 · 0 评论 -
bzoj3159: 决战
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3159 思路:题解与标程在此:http://tieba.baidu.com/p/2307619154 首先链翻转显然不能直接在lct上打翻转标记,那样是在翻转链的深度,不是翻转链上的值 于是就有了一种做法,写两个splay,一个维护权值,一个维护形态 每棵形态splay和对应值spla原创 2016-02-28 10:30:31 · 997 阅读 · 0 评论 -
bzoj3514: Codechef MARCH14 GERALD07加强版
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3514 思路:这题思路很巧妙 首先每个连通块只要保留一棵生成树的边就可以保证连通了 把每条边的编号当做边权 我们把每条边按顺序加入,维护一个每个连通块的最大生成树 每次替换树上路径的最小边 把它替换的边的编号记录到一个数组a[i]中,如果连通了两个连通块,a[i]=0原创 2016-01-14 16:40:41 · 1267 阅读 · 0 评论 -
【Qtree】Query on a tree系列LCT解法
Qtree1-7 待填坑原创 2016-02-29 21:48:40 · 2822 阅读 · 0 评论 -
bzoj3510: 首都
题面:在X星球上有N个国家,每个国家占据着X星球的一座城市。由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的。 X星球上战乱频发,如果A国打败了B国,那么B国将永远从这个星球消失,而B国的国土也将归A国管辖。A国国王为了加强统治,会在A国和B国之间修建一条公路,即选择原A国的某个城市和B国某个城市,修建一条连接这两座城市的公路。 同样为了便于统治自己的国家,国家的首都会选在原创 2015-06-25 10:16:39 · 942 阅读 · 0 评论 -
bzoj3651&3081: 网络通信
3651: 网络通信 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 50 Solved: 37 [Submit][Status][Discuss] Description 有一个由M 条电缆连接的 N 个站点组成的网络。为了防止垄断,由 C 个公司控制所有的电缆,规定任何公司不能控制连接同一个站点的两条以上的电缆(可以控制两原创 2015-06-22 21:47:05 · 436 阅读 · 0 评论 -
bzoj2631: tree
话说bzoj上叫tree的题可真多... 题目大意:路径加,路径乘,路径求和,加边删边。 思路:动态树搞搞就行了,两个标记要注意。 #include #include #include #define ll unsigned int #define ls c[x][0] #define rs c[x][1] const int mod=51061,maxn=100010; using na原创 2015-06-22 21:34:44 · 431 阅读 · 0 评论 -
bzoj3282: Tree
#include #include #include #define ls c[x][0] #define rs c[x][1] using namespace std; const int maxn=300010; int n,m; struct LCT{ int c[maxn][2],fa[maxn],rev[maxn],sum[maxn],val[maxn]; bool原创 2015-06-22 21:39:24 · 451 阅读 · 0 评论 -
bzoj2594: [Wc2006]水管局长数据加强版
题目大意:给定一个简单图,支持删边,每次询问两点间 最大边权值最小的路径。 思路:首先每次询问两点间 最大边权值最小的路径一定是在最小生成树上。具体证明可以自行百度或YY。然后我们就可以去维护最小生成树了,但是题目是删边,没法做啊....这时我们可以倒着做,离线处理,删边就成了加边。怎么用LCT维护呢?先跑一遍kruskal,因为题目保证任意时刻图是联通的,所以一定可以跑出一棵初始的最小生成树(原创 2015-06-22 20:44:58 · 1345 阅读 · 0 评论 -
bzoj1180: [CROATIAN2009]OTOCI
题目大意:询问两点是否连通(反人类的是连通输no,不联通输yes...),单点权值修改,路径和。 思路:正常的动态树,搞搞就行了。#include #include #include const int maxn=30010; using namespace std; int n,m;char op[15]; struct LCT{ int sum[maxn],fa[maxn],c[maxn]原创 2015-06-22 20:07:23 · 526 阅读 · 0 评论 -
bzoj2002:[Hnoi2010]Bounce 弹飞绵羊
思路:动态树。把每个装置看成点,能弹到的装置连边,能弹飞的装置连到n+1号点,每个点点权设为1,这样问几次弹飞就可以转化为该点到n+1号点的路径的点权和。 #include #include #include #include const int maxn=200010; using namespace std; int n,m,next[maxn];char ch; void read(in原创 2015-06-22 19:58:51 · 794 阅读 · 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 · 568 阅读 · 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 · 1368 阅读 · 0 评论 -
bzoj2819: Nim
题意:树上的NIM游戏,每次取出一条链,问先手是否有必胜策略。 思路:动态树or树链剖分维护链异或和,为0则没有,否则有。LCT死活就是TLE,代码就不贴了。原创 2015-06-22 20:12:57 · 469 阅读 · 0 评论