
树链剖分+树上乱搞
文章平均质量分 92
围巾的ACM
啊啊什么时候也能成为一个大牛啊
展开
-
LightOJ 1348 Aladdin and the Return Journey(树链剖分)
思路:一道树链剖分的基本题,给定一个数,节点数为n。先输入一个n,代表节点数,然后一行有n个数,代表 树上点从0 到n - 1的初始点权,然后n - 1行,每行两个数a b,代表这两个点之间有一条边。紧接着输入一个m,代表有m个操作,操作有两种:0 a b询问点a到点b路径上的点的权值和,1 a b把点a的权值更新为b #include #include #include #in原创 2016-05-24 23:43:57 · 420 阅读 · 0 评论 -
fzu 2082 过路费(树链剖分)
思路:树链剖分的裸题了 #include #include #include #include #define LL long long using namespace std; const int maxn = 50000+100; int siz[maxn],fa[maxn],son[maxn],dep[maxn],top[maxn],id[maxn]; int tot; int v原创 2016-05-25 22:46:04 · 346 阅读 · 0 评论 -
HYSBZ 1036 树的统计Count(树链剖分)
思路:树链剖分的又一个模板题,不过坑了好久...不知道为什么输入询问的时候用string会RE... #include #include #include #include #include #include using namespace std; const int maxn = 30005; #define lson i<<1,l,m #define rson i<<1|1,m+1原创 2016-05-30 23:26:33 · 283 阅读 · 0 评论 -
spoj375 Query on a tree(树链剖分)
思路:树链剖分的模板 #include #include #include #include using namespace std; #define Del(a,b) memset(a,b,sizeof(a)) const int N = 10005; int dep[N],siz[N],fa[N],id[N],son[N],val[N],top[N]; //top 最近的重原创 2016-05-22 15:51:07 · 357 阅读 · 0 评论 -
HDU 5458 Stability(树链剖分缩点并查集)
思路:有两种操作,一种是删除一条边,另一种是询问点u,v之间的桥的数目,显然删边是不好操作的,一个经典的套路就是离线把操作存起来,从最后的图开始加边,因为题目保证最后的图一定是联通的,所以不用考虑别的,当它最后的图是一棵树的时候,我们设边权为1,那么u,v之间的桥的数目就是两点间的距离,而如果加一条边的话那么u,v会形成环,那么就将它们的边权设为0,对答案没有贡献,那么就可以用并查集将最后的图缩成原创 2016-09-02 13:25:58 · 510 阅读 · 0 评论 -
2016北京网络赛E hihocode1387 A Research on "The Hundred Family Surnames"(LCA+树直径)
思路:参照ICPC-CAMP的题解 题意: 给一棵树,每个节点上有个颜色,很多询问,询问两种颜色,问从这两种颜色中各取一个节点,距离最大是多少。 题解:处理出每种颜色的节点们的直径(也就是距离最大的点对)。然后对于两种询问颜色(a,b)(a,b)的直径(au,av)(au,av)和(bu,bv)(bu,bv),答案就是\max\{dis(au,bu),dis(au,bv),dis(av原创 2016-09-25 14:39:37 · 613 阅读 · 0 评论 -
HDU 5927 Auxiliary Set(树上搞事)
思路:考虑对于每一个询问的点按照深度排序,如果该不重要的点的儿子有两个,那么就证明可以贡献一个答案,如果该不重要的点没有儿子了,那么对于该点的父节点的儿子数减一 #include using namespace std; const int maxn = 100000+7; vectore[maxn]; int dep[maxn],fa[maxn],son[maxn]; int a[ma原创 2016-10-22 00:14:00 · 648 阅读 · 0 评论 -
Codeforces Round #381 (Div. 2) D Alyona and a tree(DFS树上搞事)
思路:对于在v的子树中的u,dis(u,v)其实就是dep[u]-dep[v] #include using namespace std; const int maxn = 2e5+7; #define LL long long vector >e[maxn]; vector >path; LL a[maxn],dep[maxn],ans[maxn]; void dfs(int u) {原创 2016-12-01 21:11:11 · 1104 阅读 · 0 评论 -
2017广东工业大学程序设计竞赛决赛F tmk找三角(套路)
思路:一眼非常神,其实想一下,要满足三角形必须要a+b>c,那么最坏情况下就是a+b=c再多一点点,那么这不就是一个斐波那契吗?而50项的斐波那契数列就已经大于2^31-1了,那么所以当树上的点大于50个的时候是一定能组成的,少于50个的时候直接抠出来暴力即可 #include using namespace std; const int maxn = 1e5+7; vector >e[原创 2017-03-27 15:26:44 · 1317 阅读 · 2 评论