树
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[动态树分治] BZOJ4012 [HNOI2015]开店
膜PoPoQQQ:http://blog.csdn.net/popoqqq/article/details/45365043省选前学动态树分治 跑起来飞快 45s+看着提交记录 只能说惨不忍睹 爆int呆滞了一早上 还有因为没删文件 没强制在线 RE的动态树分治 印象中还有 幻想乡战略游戏和捉迷藏 代码注释一大片 丑我也不管了#include#include#inclu原创 2016-03-15 12:16:34 · 2454 阅读 · 0 评论 -
[分块 暴力 树] BZOJ 4381 [POI2015]Odwiedziny
大概就是步数小的预处理前缀和步数大的直接倍增跳各种细节搞得欲仙欲死#include#include#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p原创 2016-09-04 07:54:01 · 407 阅读 · 0 评论 -
[缩树 主席树] BZOJ 4539 [Hnoi2016]树
hnoi的大数据结构题把每一个残基缩一下 变成一颗大树 每次新增查询一下是在哪个残基上 这里要用主席树求子树第k大然后记一下到fat的权值然后就各种细节搞lca#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char b原创 2016-09-22 18:44:34 · 408 阅读 · 0 评论 -
[树形DP 双指针扫描] 2016 计蒜之道 初赛 第六场 微软的员工福利
n3的做法可以对每个点枚举最小值最大值我们发现极差/1000最多只有101种取值那我们枚举极差 枚举最大值 同时顺便维护在这个取值区间内的最优决策较大提升的显示器不在区间内的话,就一定要把较小显示器选上;如果来自同一子树的两个显示器都在区间内,贪心选 dpdp 值较大的那个可以用尺取法双指针扫过复杂度(101n+nlogn)log的复杂度来自排序#inc原创 2016-11-10 18:09:50 · 733 阅读 · 0 评论 -
[并查集 || 点分治 树重心] 2015 计蒜之道 复赛 京东的物流路径
官方题解:本题有多种解法。首先是点分治的思想,在点分治的时候,我们每一次选取一个中心,先统计过中心的路径最大值,然后删掉中心,递归处理其它子树。统计过中心的路径最大值,我们以中心为根深度搜索一遍,一个需要注意的地方是路径的两个端点不能在同一子树内,因为这样可能会重复统计。所以我们把路径按子树分类,然后点权排序以后更新路径按子树分类的最大值和次大值,之和与当前点权的乘积就是答案。本题还可原创 2016-11-10 18:14:03 · 421 阅读 · 0 评论 -
[二分 贪心 || 树的划分] NOI2003 Day 2 Berry Test6~Test9
论文:鬲融--浅谈特殊穷举思想的应用论文:贝小辉--浅析树的划分问题并不会打树的划分算法#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf[100000原创 2016-12-09 14:02:28 · 308 阅读 · 0 评论 -
[树形DP] POJ 2152 Fire
论文:陈启峰--一张一弛,解题之道详见论文 篇幅过长 不摘录了放宽 “每个城市在不超过距离的前提下,可以选择任意一个消防站作为负责站”制约“假设城市p1选取城市pm的上消防站作为负责站,令p1到pm的路径为p1p2p3……pm,那么对于任意pi都有的负责站为pm。”#include#include#include#include#define原创 2016-12-09 20:37:49 · 329 阅读 · 0 评论 -
[树形DP 费用流手动增广] Codeforces Gym 101190 NEERC 16 M. Mole Tunnels
因为这个图增广来增广去不会有负环 那么一条增广链必然是树上一条简单路径 那么考虑用树形DP找最短路增广dls是这么说的考虑费用流,每一次要找一条最短的增广路。枚举LCA,然后维护一下每个子树往下走的最短路即可。增广的时候加一下反向边。可以直接树形dp,不需要数据结构维护。#include#include#includeusing namespa原创 2017-01-03 17:31:25 · 813 阅读 · 0 评论 -
[边双连通分量 缩点 虚树 欧拉序列LCA] Codeforces 639F VK Cup 2016 - Round 1 F. Bear and Chemistry
这道题就是缩缩缩!先把原图缩成一个双连通树 然后查询的时候把所有关键点缩成一颗虚树 加完询问里的边 在缩一次双连通#include #include #include #include #include#include#define cl(x) memset(x,0,sizeof(x)) using namespace std; inline ch原创 2016-12-28 18:48:43 · 699 阅读 · 0 评论 -
[树形DP] HihoCoder #1471 Challenge 27 拥堵的城市
大概就是f[i][j]f[i][j]表示ii子树中还有jj条链伸出来 子树合并进来转移一下 转移的时候枚举kk对边要配对 也就是不伸出去了 比赛的时候复杂度分析错 搞得自己一开始否定了这个转移 最后几十秒钟查出错还把代码给交错了 真的是整场比赛智商无下限 感谢整场带我的rxd大爷#include<cstdio>#include<cstdlib>#include<algorithm>原创 2017-02-19 21:37:13 · 489 阅读 · 0 评论 -
[容斥 状压DP 树形DP] BZOJ 4455 [Zjoi2016]小星星 & UOJ #185 【ZJOI2016】小星星
杜老师说的哦UOJ上需要卡常#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p原创 2017-01-20 20:52:44 · 594 阅读 · 0 评论 -
[对偶 KM算法 生成树 || 最大费用可行流 || 线性规划] BZOJ 1937 [Shoi2004]Mst 最小生成树
树边减,非树边加,wi表示i号边原来的边权,di表示i号边的改变量对于一条非树边,覆盖所有树边,都要满足:wi−di≤wj+dj得wi−wj≤di+dj这样的话d就是KM算法里的顶标跑最大匹配即可#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace原创 2016-07-04 18:44:48 · 913 阅读 · 0 评论 -
[环套树 bfs序] ICPC 2016 Shenyang J & HDU5957 Query on a graph
按层建线段树,或者说是bfs序。 然后修改的一定是不超过5层里面的连续的段,可以在线段树上直接修改。 对于环+树,把环抠出来之后按树的方法做。代码丑#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static c原创 2017-03-29 07:44:35 · 666 阅读 · 0 评论 -
[树的直径] BZOJ 1999 [Noip2007]Core树网的核
做这个题 主要是复习几个性质对于树中的任意一点,距离其最远的点一定是树的直径的某一端点所有直径的中心相同,这个中心可以是一个顶点,也可以在一条边上。所有点到他的最远点都要通过这个中心所有的直径所能求出的该最小偏心距相等然后我们就直接找出一条直径 在上面two-pointers扫一下就好了 每次我们用 当前区间内不经过直径上的点抵达的其他点的最大深度和到两端的距离的最大值 更新下答案#inc原创 2017-04-05 21:00:57 · 643 阅读 · 0 评论 -
[树的直径 树形DP] UOJ #11【UTR #1】ydc的大树
题解链接大意是我们求出直径的中心 那么到最远点必然经过中心 把它提到根 就可以在枚举删的白点时很快统计出能够使多少个黑点不高兴#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;原创 2017-04-05 21:05:17 · 757 阅读 · 0 评论 -
[树的直径] Codeforces 804D Round #411 (Div. 1) D. Expected diameter of a tree
这个只要知道两个子树连在一起的直径端点必然是各自直径的端点就好了 然后瞎枚举一通 只要知道∑i∑jmin{sizei,sizej},∑isizei=n\sum_i\sum_j min\{size_i,size_j\} ,\sum_i size_i=n是O(nn√)O(n\sqrt n)的就好了#include<cstdio>#include<cstdlib>#include<algorith原创 2017-05-23 21:19:56 · 453 阅读 · 0 评论 -
[构造] Codeforces 717E Bubble Cup 9 - Finals E. Paint it really, really dark gray
这是一道递归构造的题先构造完子树,然后可以通过走father来调整自己因为1没有father 需要特判 走一个儿子来调整#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2){ p2=(p原创 2016-09-14 19:35:19 · 461 阅读 · 0 评论 -
[第二类斯特林数 树形DP] HDU 4625 JZPTREE && BZOJ 2159 Crash 的文明世界
%%%jiry_2也可以这样:http://blog.csdn.net/dwylkz/article/details/9749827#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ s原创 2016-08-22 21:25:55 · 1078 阅读 · 0 评论 -
[树上倍增] BZOJ 4281 [ONTAK2015]Związek Harcerstwa Bajtockiego
树上倍增裸题%%%用树链剖分拿rank3的Evan大爷#include#include#include#include#include#define V G[p].vusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p原创 2016-04-16 13:55:10 · 512 阅读 · 0 评论 -
[概率 树形DP] BZOJ 3566 [SHOI2014]概率充电器
题解:http://www.cnblogs.com/ctlchild/p/5105390.html考虑补集转化。先dfs一遍,令f[u]=(1-p[u])*∏(1-(1-f[v])*w) f[u]表示u这个点通过其子树并不能联通的概率。然后考虑v从其父亲连过来的情况,设x=1-f[u]/(1-(1-f[v])*w)表示除掉v,u联通的概率,那么f[v]*=(1-x*w)然后加起原创 2016-04-22 10:16:38 · 436 阅读 · 0 评论 -
[树 乱搞] BZOJ 4238 电压
Po姐的说法任选一棵生成树,考虑选择树边或者非树边 定义一条非树边为好边当且仅当两个端点在树上的距离为奇数,否则为坏边 如果坏边只有一条那么这条坏边是可选的 如果一条树边被所有的坏边覆盖而且不被好边覆盖那么这条边是可选的 按照自己的理解 就是在所有奇环上 不在任何偶环上的边#include#include#include#includeusing n原创 2016-06-06 07:41:15 · 662 阅读 · 0 评论 -
[并查集 树] BZOJ 4551 [Tjoi2016&Heoi2016]树
本来想的二分加树链剖分结果直接离线并查集可过记录fat为上边的第一个有标记的祖先#include#include#include#define V G[p].vusing namespace std; inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1原创 2016-05-29 21:37:28 · 344 阅读 · 0 评论 -
[树形DP 启发式合并 神题] BZOJ 4543 [POI2014]Hotel加强版 & BZOJ 3522 [Poi2014]Hotel
%%%神犇的题解转移不难想 关键是空间和时间空间用轻重链的思想和指针转移 时间么 指针转移&启发式合并复杂度的证明比较巧妙“任意设一点作为根。令 f(a, d) 表示在以 a 点为根的子树中,与 a 距离为 d 的节点数;g(a, d) 表示在以a 为根的子树中选择两个节点,满足剩下的一个节点 s 需在 a 子树外选择且与 a 的距离必须为 d 的方案数。则方案原创 2016-05-18 21:31:46 · 2083 阅读 · 1 评论 -
[树上莫队] BZOJ 3757 3052 4129
传送门http://blog.csdn.net/kuribohG/article/details/41458639http://vfleaking.blog.163.com/blog/static/174807634201311011201627/“用S(v, u)代表 v到u的路径上的结点的集合。用root来代表根结点,用lca(v, u)原创 2016-02-16 16:09:54 · 1193 阅读 · 0 评论 -
[Hash] BZOJ 4337 树的同构
哈希函数 自己乱搞一个就行了#include#include#include#include#define cl(x) memset(x,0,sizeof(x))#define M 13000007#define V G[p].vusing namespace std;typedef long long ll;inline char nc(){ static char原创 2016-02-04 19:56:20 · 1131 阅读 · 0 评论 -
[灾难树] BZOJ 2815 2851
灾难树原创 2016-01-24 15:04:24 · 1361 阅读 · 0 评论 -
[树 树状数组] SRM659 1100pts
题目大意:题解:#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return原创 2016-07-04 20:50:16 · 339 阅读 · 0 评论 -
[KM 树同构Hash DP] BZOJ 3197 [Sdoi2013]assassin
丢下题解跑:http://blog.csdn.net/PoPoQQQ/article/details/43206463#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef unsigned long long ull; inline c原创 2016-07-04 19:03:23 · 558 阅读 · 0 评论 -
[DP 树 神奇优化] BZOJ 3057 圣主的考验
N3很好想 然而T飞 强行搬运:裸的树形DP很简单,F[i,j]表示i个节点,高度为j的方案数。枚举左子树有多少个节点转移即可。但是这样是O(N^3)的,会超时。注意到满足题目所述要求的树高度的范围很小。不妨把具有i个节点的满足题目要求的树的高度范围记为L[i]~R[i]。那么我们先考虑如下两个问题:高度为h的树最多有多少个节点。显然就是这个高度的满二叉原创 2016-06-27 11:58:17 · 1035 阅读 · 0 评论 -
[树形DP] IOI 2012 Ideal city
#include#include#includeusing namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p原创 2016-07-07 22:06:36 · 401 阅读 · 0 评论 -
[欧拉序列 LCA 鬼畜暴枚] BZOJ 1906 树上的蚂蚁 && BZOJ 3700 发展城市
搬运题解:http://blog.sina.com.cn/s/blog_ab8386bc0101i146.html首先求出这颗树的欧拉序列,方便做LCA。。因为蚂蚁是10^3级别 完全可以枚举两只蚂蚁那么剩下的问题就是 在很短的时间内判断两只蚂蚁是否会相遇对于两只蚂蚁 设他们的路径是a→b c→d 我们先找到他们的路径中相同的部分路径中相同的部分可能是一个点,也可能原创 2016-08-28 08:09:06 · 1116 阅读 · 0 评论 -
[AC自动机 fail树 树链的并] BZOJ 3881 [Coci2015]Divljak
建出AC自动机和fail树然后每一个串在自动机上跑一遍 然后就是对应的节点到fail树根的路径的并都加一路径的并有一个很好地idea 可以用两种dfs序 入栈序和出栈序入栈序小于等于子树的last 减去 出栈序小于自己的 就是到根的路径#include#include#include//#define dprintf(...) fprintf(stderr,__V原创 2016-08-05 15:02:56 · 533 阅读 · 0 评论 -
[树形DP || 贪心] BZOJ 1907 树的路径覆盖
DP#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,10原创 2016-08-23 18:26:25 · 425 阅读 · 0 评论 -
[高斯消元 线性基 树 记数] BZOJ 2322 [BeiJing2011]梦想封印
删边变加边 如果加的是非树边 相当于加了一个环 加入线性基中如果加入的是树边 就dfs扩展树两条链是等价的 相当于 他们用线性基消过后是一样的 用set维护解是不等价链的个数*1减一是要去掉0#include#include#include#includeusing namespace std;typedef long long ll;inline c原创 2016-07-06 22:57:49 · 710 阅读 · 1 评论