![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树
文章平均质量分 76
Think_Idea
水滴石穿
展开
-
BestCoder Round #43(LCA+rmq)
本来O(n^2)超时的算法,经过一定的剪枝之后竟然通过了原创 2015-06-07 20:29:12 · 370 阅读 · 0 评论 -
hdu3887 Counting Offspring(dfs序+树状数组)
题目链接:点击打开链接题目描述:给定一棵树,统计一棵子树中节点编号小于子树根节点的数量?解题思路:先dfs预处理,对于每个子树可以得到一段连续的序列使用树状数组求连续区间的和注意:1、树是无向图,建树时注意建两条边,由于测试案例比较坑,我以为左边为右边的父节点,所以建图时只见了一条边,导致一直tle2、dfs容易栈溢出,记得使用stack模拟递归(sta原创 2015-08-25 16:39:32 · 846 阅读 · 0 评论 -
hihocoder1238 Total Highway Distance(DFS+二分查找/map)
题目链接:点击打开链接题意描述:给定一棵树,树上每条边有一个权值,记树上任意两点之间路径权值之和为Sx,求所有点对之间Sx之和ans?有下面两种操作1、修改某条边的权值2、求ans解题思路:DFS+二分查找分析:首先多个点对可能经过同一条边,因此我们只需要统计树上的每条边被用了多少次即可,这样ans=求和(w(边的权值)* tt(边出现的次数))对于操作1:更新an原创 2015-10-09 20:40:38 · 1505 阅读 · 0 评论 -
hdu2196 Computer(树上最长路径 dp)
题目链接:点击打开链接题意描述:给定一棵树,树上每条边的有一个权值,问从任意一个点出发能走得最长路径是多少?解题思路:树上最长路径 dp1、任意找一个点作为根节点,将无根树转化为有根树2、在dfs过程中更新f[i],g[i],其中f[i]记录以i为节点向下扩展最长路,g[i]为次长路,并用mark标记每个节点最长路的儿子节点3、在dfs1的过程中更新h[i],h[i]表原创 2015-08-26 19:08:33 · 1444 阅读 · 0 评论 -
#1050 : 树中的最长路(两次BFS)
题目链接:点击打开链接题意描述:求树上的最长路?解题思路:任找一点u作为根节点BFS找出距离该点最远的点v,然后以v为根节点BFS可找出树上的最长路代码:#include #include #include #define MAXN 100010#define mem(a,b) memset(a,b,sizeof(a))using namespace std;int h原创 2015-10-09 00:17:29 · 892 阅读 · 0 评论 -
hdu1054 Strategic Game(最小覆盖点-树形dp)
题目链接:点击打开链接题意描述:给一棵树,找最少的点集能把树上的所有边覆盖掉?解题思路:典型的最小覆盖点树形dp即可dp[i][0]:表示如果不选i点则dp[i][0]+=dp[t][1];///表示要选所有的儿子节点dp[i][1]:表示如果选i点则dp[i][1]+=min(dp[t][0],dp[t][1]);///表示选择其儿子节点中较小的情况代码:原创 2015-08-26 10:22:51 · 764 阅读 · 0 评论 -
poj3659 Cell Phone Network(最小支配集-树形dp)
题目链接:点击打开链接题目描述:给定一棵树,从中选取尽量少的点使每个点要么被选中,要么和被选中的点直接相连?解题思路:树上的最小支配集,树形dpdp[i][0]:选中i作为支配集dp[i][1]:不选i作为支配集,但其子节点覆盖了idp[i][2]:不选i作为支配集,而且其子节点没有覆盖i代码:原创 2015-08-26 12:21:49 · 820 阅读 · 0 评论 -
hdu1520 Anniversary party(最大独立集 树形dp)
题目链接:点击打开链接题目描述:现有一棵树,树上每个结点都有一个权值,问从中选一些点,这些点两两之间不直接连接,问权值最大为多少?解题思路:很裸的一道树上最大独立集问题 树形dp即可dp[i][0]:不选i节点 dp[i][0]+=max(dp[t][0],dp[t][1]);dp[i][1]:选i节点 dp[i][1]+=dp[t][0];代码:#pragma c原创 2015-08-26 10:57:29 · 639 阅读 · 0 评论 -
hdu2586 How far away ?(LCA->RMQ)
题目链接:点击打开链接题意描述:给定一棵树,找出树中任意两点之间的距离?解题思路:1、dfs预处理达到欧拉序列2、使用RMQ找出最近公共祖先3、找出根到任意一点的距离,答案为dis[f]+dis[t]-2*dis[rt]代码:#include #include #include #include #define MAXN 40010using原创 2015-08-25 21:49:35 · 685 阅读 · 0 评论 -
tarjan离线算法-LCA最近公共祖先算法模板(详细)
/********************************************//*****LCA最近公共祖先离线算法(tarjan)*****//********************************************/#include #include #include #include using namespace std;con原创 2015-05-05 22:00:40 · 1048 阅读 · 0 评论 -
poj1861Network(最小生成树-克鲁斯卡尔算法)
///基本思路:最小生成树克鲁斯卡尔算法(排序+并查集)http://poj.org/problem?id=1861#include #include #include using namespace std;struct node{ int x; int y; int v; int pos;///记录读入时的位置原创 2015-05-09 23:12:47 · 449 阅读 · 0 评论