
LCA、树
风萧萧兮易水寒丶
985软件工程本科在读
展开
-
Codeforces Game On Leaves(树)
题目大意:给定一棵树,有两个人轮流拆除树上的叶子节点,摘除编号为x的节点的人获胜,问最后谁会获胜解题思路:以x为根节点,求x的所有孩子节点的数量,如果数量为奇数,则Ayush获胜,否则Ashish获胜,这里需要注意一种特殊情况,即第一个人就能取得胜利,所有记录直接与x相连的节点的数量代码:#include <bits/stdc++.h>using namespace std;int t,n,x,f[1010],sum[1010];vector<int> arr[10.原创 2020-06-08 21:34:57 · 402 阅读 · 0 评论 -
Codeforces Linova and Kingdom(树形结构、贪心)
题目大意:给定一颗有n个节点的树,从中选出k个节点,从每个节点走到根节点1,路径中经过的未选中的节点的个数为kx,求一种选择方案,使总的kx之和最大。解题思路:求出每个节点对总值的贡献值,加入选择节点x,那么该节点的贡献值为x的深度减去该节点所有子树中节点的个数,因为选择节点的时候,必然使从树最深的地方开始的,当一个可以选择一个节点时,其子节点也必然已经被选择(贪心),选入该节点后,其子树...原创 2020-04-23 18:10:19 · 154 阅读 · 0 评论 -
classroom(LCA)
代码:#include<bits/stdc++.h>using namespace std;vector<int> arr[100010];int f[100010][22],dep[100010],fi[100010],dis,L;void dfs(int u,int fa,int d){ dep[u]=d,f[u][0]=fa; if(fa=...原创 2020-04-17 17:03:32 · 207 阅读 · 0 评论 -
小H和游戏(树形结构)
解题思路:最直接的想法是,每次轰炸一个点时,将距离2以内的点的轰炸次数都加1,但是这可能会产生一个问题,很容易被卡,如果只有一个父亲节点,n-1个儿子节点,那么复杂度为O(n^2)所以应该采取另外一个方法,即每次轰炸将贡献传递给父亲和爷爷还有自身,这样每次就降低了复杂度,每次次数询问时,只需查询父亲、爷爷、自身的贡献次数就行代码:#include <bits/stdc++.h>...原创 2020-04-15 17:33:49 · 963 阅读 · 0 评论 -
LCA模板
//dep[x]表示x的深度, pa[i][x]表示x的向上的第2^i个父亲, 比如pa[1][x]表示的就是x的父亲的父亲(x的爷爷) 它的值就等于pa[0][pa[0][x]]void dfs(int u,int fa,int d){ dep[u]=d; f[u][0]=fa; for(int i=1;i<=20;++i) f[u][i]=f[...原创 2020-04-09 19:02:37 · 250 阅读 · 0 评论