bzoj 2815 灭绝树】的更多相关文章

对于一个食物网(一个DAG),一个物种死亡后,某些物种就必然死亡,求出必然死亡的是那些物种. 灭绝树的另一种含义是:“灭绝树跟节点到节点u的路径上的节点由那些原图中从根节点到节点u的所有路径中都经过了的点“. /************************************************************** Problem: 2815 User: idy002 Language: C++ Result: Accepted Time:424 ms Memory:1403…
[题意] 求把每个点删除后,不可达点的数目. [思路] 构造一棵“灭绝树”,要求这棵树满足如果删除根节点后则该子树内的所有结点都不可达.则答案为子树大小-1. 如何构造这棵“灭绝树”? 将原图拓扑排序.当我们处理u的时候保证对u的所有食物已经建好树.引入0号节点,以之为所有生产者的食物.设u的食物为v[0..k],当我们至少把v[0..k]的LCA删掉之后u会灭绝,因此由LCA向u连边.增量构造LCA所需信息dep,fa. 鉴于写dfs的时候发生了一些奇奇怪怪的事(包括卡了下bzoj的评测机 l…
灾难(1s 128MB)catas [样例输入] 5 0 1 0 1 0 2 3 0 2 0 [样例输出] 4 1 0 0 0 题解: 主要算法:拓扑排序:最近公共祖先(Lca): 先跑出拓扑序 我们按拓扑序建立一棵"灭绝树" 灭绝树含义是当一个点灭绝时,它的子树将会全部灭绝 所以答案就是点在灭绝树中的子树大小 一个点如果灭绝,那么需要所有指向它的点灭绝 由于拓扑序的关系,指向它的点已经加入过了"灭绝树"中 所以这个点要灭绝,就需要所有指向它的点全部灭绝,即这些点的…
呃,题面没了,大概就是给出一些生物之间的捕食关系,求灭绝树每个点的灾难值. 拓扑排序之后倒着加入点,动态维护fa[][]数组,倍增法求LCA,当然大佬愿意写动态树也是极好的…… #include <cstdio> inline int nextChar(void) { ; static char buf[siz]; static char *hd = buf + siz; static char *tl = buf + siz; if (hd == tl) fread(hd = buf, ,…
BZOJ 2243 染色 | 树链剖分模板题进阶版 这道题呢~就是个带区间修改的树链剖分~ 如何区间修改?跟树链剖分的区间询问一个道理,再加上线段树的区间修改就好了. 这道题要注意的是,无论是线段树上还是原树上,把两个区间的信息合并的时候,要注意中间相邻两个颜色是否相同. 这代码好长啊啊啊啊 幸好一次过了不然我估计永远也De不出来 #include <cstdio> #include <cstring> #include <algorithm> using namesp…
BZOJ.1036 [ZJOI2008]树的统计Count (树链剖分 线段树维护和与最值) 题意分析 (题目图片来自于 这里) 第一道树链剖分的题目,谈一下自己的理解. 树链剖分能解决的问题是,题目中反复要求对链上信息进行修改和查询.如果依旧采取用dfs序的方法,会发现不适用,原因是dfs序适用于处理子树的问题.当然暴力肯定是要被卡掉的. 树链剖分分为两次dfs. 第一次dfs求出每个节点的father,son,size,deep,这里涉及到重儿子的概念,网上有很多资料就不在这里赘述了.换句话…
Description 给定一个n个点,m条边的带权无向图,和起点S.请你选择一个点u(u!=S),使得在图中删掉点u 后,有尽可能多的点到S的最短距离改变. Solution 先建出最短路DAG,在DAG中跑出灭绝树 灭绝树是一个点灭绝后子树中的点都灭绝的一棵树(灭绝在不同题目中意义不同) 先拓扑一下,每个点的最短路依赖的点就在它拓扑序前了 我们在拓扑序中从前往后扫 扫到点x,它的依赖点都已求出灭绝树父亲 x的灭绝树父亲就是它所有依赖点的灭绝树LCA LCA可以用树上倍增求一下 Notice…
[BZOJ 4771]七彩树(可持久化线段树+树上差分) 题面 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色,其中第i个节点的颜色为c[i].如果c[i]=c[j],那么我们认为点i和点j拥有相同的颜色.定义depth[i]为i节点与根节点的距离.为了方便起见,你可以认为树上相邻的两个点之间的距离为1.站在这棵色彩斑斓的树前面,你将面临m个问题. 每个问题包含两个整数x和d,表示询问x子树里且depth不超过depth[x]+d的所有点中出现了多少种…
首先假设我们定义x灭绝后y会灭绝,那么离y最近的x就为y的父亲节点,那么如果我们可以求出每个节点的父亲节点,我们就得到了一棵树,然后每个节点的灾难值就是子树的大小-1. 我们将出度数为0的节点的父亲节点定义为0,那么我们可以发现,某个点的父亲节点就是他所有儿子的父亲节点的lca. 备注:lca写错了,查了半天. //By BLADEVIL #include <cstdio> #include <cstring> #include <algorithm> #define…
Problem 旅行 (BZOJ 3531) 题目大意 给定一颗树,树上的每个点有两个权值(x,y). 要求维护4种操作: 操作1:更改某个点的权值x. 操作2:更改某个点的权值y. 操作3:求a-->b路径上所有x属性与a,b相同的点y属性的和. 操作4:求a-->b路径上所有x属性与a,b相同的点y属性的最大值. N,Q ,x <= 10^5  ,  y <= 10^4 解题分析 由于x属性的范围较大,无法直接统计. 考虑每次修改为单点修改,询问时只对相同x属性的询问. 因此,…
题目链接:BZOJ - 1036 题目分析 这道题可以用树链剖分,块状树等多种方法解决,也可以使用 LCT. 修改某个点的值时,先将它 Splay 到它所在的 Splay 的根,然后修改它的值,再将它 Update 一下. (1) 询问 x, y 两点之间的路径时,假设 x 是深度小的那一个,先 Access(x) ,然后再 Access(y) 的返回值就是 x, y 的 LCA . 这时从 x 到 LCA 的路径已经在 LCA 处断开了.我们将 x Splay 一下,然后就是 x 所在的 Sp…
3319: 黑白树 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 557  Solved: 194[Submit][Status][Discuss] Description 给定一棵树,边的颜色为黑或白,初始时全部为白色.维护两个操作:1.查询u到根路径上的第一条黑色边的标号.2.将u到v    路径上的所有边的颜色设为黑色.Notice:这棵树的根节点为1 Input 第一行两个数n,m分别表示点数和操作数.接下来n-?    1行,每行2个数…
修改+查询第k小值 单纯主席树修改会打乱所有,所以再套一个树状数组维护前缀和使得修改,查询都是log 对了,bzoj上不需要读入组数,蜜汁re.. #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> using namespace std; int n,m,sz,T,num_tot,num_cnt,num_l,num_r…
BZOJ 考虑没有深度限制,对整棵子树询问怎么做. 对于同种颜色中DFS序相邻的两个点\(u,v\),在\(dfn[u],dfn[v]\)处分别\(+1\),\(dfn[LCA(u,v)]\)处\(-1\),这样答案就是求子树和了(同种颜色多余贡献的会被减掉). 对于深度的限制,考虑维护\(\max\{dep\}\)棵线段树\(T_i\),分别表示只考虑深度在\(1\sim i\)之间的点的贡献(下标依旧是DFS序).因为我们发现,对于询问\((x,k)\),求\(T_{dep[x]+k}\)这…
BZOJ 洛谷 \(Description\) 给定\(n\)棵无根树.对每棵树,输出与它同构的树的最小编号. \(n及每棵树的点数\leq 50\). \(Solution\) 对于一棵无根树,它的重心最多不超过两个. 所以从两个重心分别DFS,可以将无根树转为有根树.选Hash值较小或较大的做整棵树的Hash值好了. 然后可以用树哈希,或者括号序(直接用string)来表示每棵树. 对于每个点的每棵子树,可以对哈希值或字符串sort一下用最小表示法记录. //936kb 20ms #incl…
题目链接 BZOJ 4785 题解 这道题真是令人头秃 = = 可以看出题面中的九条可怜把求前缀和写成了求后缀和,然后他求的区间和却仍然是sum[r] ^ sum[l - 1],实际上求的是闭区间[l - 1, r - 1]的区间和.什么时候[l - 1, r - 1]的区间和与[l, r]的想等呢?就是位置l - 1与r对应的值相等的时候.于是问题就转换成了:修改操作每次随机修改区间中的一个位置,询问操作每次查询两个位置的值相同的概率. 可以想到一种做法:用线段树维护每个位置上的值为1的概率,…
http://www.cnblogs.com/JS-Shining/archive/2013/01/12/2857429.html 题面 题解上写了用什么dominator tree,吓晕了,看了看,好像看不懂,于是看了看hzwer的代码,发现和dominator tree无半点关系. ----------------------------------------------------------------------------------------------------------…
思路: 主席树 做完BZOJ 3123 觉得这是道水啊-- 然后狂RE 狂MLE 要来数据 忘把deep[1]设成1了----------. 啊wocccccccccccccccc //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 200050 #define M 5000000 typedef long long…
Time limit 10000 ms//另外,BZOJ只算所有点的总时限,所以可能会放过一些原本会TLE的代码 Memory limit 165888 kB OS Linux SourceZJOI2008 吐槽 时隔两年再次写树剖,跟楞半岛,找bug找得想吐,被卡题惨烈程度堪比这次--[HAOI2015]树上操作. 这题被卡的地方在于,单点修改的时候,树上节点的老id没有变成新id,就拿到线段树上做修改了--卡了两天,拿lemon在本地一遍又一遍测试,没有去oj上交,不然有卡评测的嫌疑-- 顺…
3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discuss] Description 描述zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成任务后才能进入遥远的国度继续追杀. 问题是这样的:遥远的国度有n个城市,这…
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 14302  Solved: 5779[Submit][Status][Discuss] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 I…
题目链接 题意: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身 分析:树链剖分第一题,把树拆成一条条链,有重链和轻链,每个点有转换后的新的位置,同一条链是线性的区间,这样可以用线段树进行操作.第一个是单点更新,第二个先求LCA,然后把u和v移动到lca所在的链,转移一次都是转移链,区间询问最大值和总和,…
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 14354  Solved: 5802 [Submit][Status][Discuss] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成 一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权…
题意: “余”人国的国王想重新编制他的 国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个 不同的城市之间有且仅有一条直接或间接的道路.为了防止管理太过分散,每个省至少要有B个城市,为了能有效的管理,每个省最多只有3B个城市.每个省必须 有一个省会,这个省会可以位于省内,也可以在该省外.但是该省的任意一个城市到达省会所经过的道路上的城市(除了最后一个城市,即该省省会)都必须属于该 省.一个城市可以作为多…
我原来准备做方差的.. 结果发现不会维护两个标记.. 就是操作变成一个 a*x+b ,每次维护a , b 即可 加的时候a=1 ,b=v 乘的时候a=v ,b=0 #include <cstdio> ; long long a[Maxn],n,P,l,r,c,m,type; struct Node { long long mul,add,sum,len; }tree[Maxn<<]; inline void Change(long long o,long long mul,long…
4337: BJOI2015 树的同构 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4337 Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树就成为有根树. 对于两个树T1和T2,如果能够把树T1的所有点重新标号,使得树T1和树T2完全相 同,那么这两个树是同构的.也就是说,它们具有相同的形态. 现在,给你M个有根树,请你…
http://www.lydsy.com/JudgeOnline/problem.php?id=1036 题意:中文题意. 思路:也是普通的树链剖分.唯一注意的点是在change函数中 while(top[u] != top[v]) { if(dep[top[u]] < dep[top[v]]) swap(u, v); ) ans = max(ans, query(, , tim, tid[top[u]], tid[u], type)); , , tim, tid[top[u]], tid[u]…
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3589 题意:给出一棵有根树,两种操作:(1)以u为根的子树所有节点权值加上一个数字:(2)给出若干个链,求这些链的节点的权值和.重复的节点的权值只计算一次. 思路:AAA树:每个节点有四个孩子,0和1是动态树的左右孩子,其他的孩子弄成一个二叉树保存在2 3号节点上. void add(i64 &x,i64 y) { x=(x+y)&(mod-1); } struct nod…
用树套树来解决这个问题,存储每个节点的数值是多少,然后交换 对于答案的变更可以讨论下,假设交换的是x,y位置的数x<=y 如果x=y || high[x]=high[y]则对答案没有影响 如果high[x]<high[y],那么首先交换x,y会对这两个点的逆序对数增加1,否则减小1 那么这是对于这两个数中间的数的逆序对的影响就是: x的移动会令在这个区间里比x权值小的数与x不在为逆序对,所以答案减少个数 同时令比x的权值大的数多一个与x的逆序对,所以答案增加个数. y类似,在此不再赘述 /**…
这是树链剖分的入门题,也是我学树链剖分的第一题. 树链剖分:就是把树中和线段树联系起来,求(u,v)路径中权值的最大值和其路径的权值和. 入门blog:http://blog.sina.com.cn/s/blog_7a1746820100wp67.html https://quartergeek.com/summary-of-heavy-light-decomposition/ kuangbin 菊苣的专题训练:http://acm.hust.edu.cn/vjudge/contest/view…