随笔分类 -  树 - 基础算法

摘要:题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,现遍历整棵树,要求每条边仅被经过两次,问是否存在一种特定的遍历方式使得 dfs 序中节点的相对前后关系符合给定的顺序。 题解: 首先,由于要求每条边仅能经过两次,可知若正在遍历当前节点 u,则以 u 为根节点的子树中的所有节点都必须遍历,因 阅读全文
posted @ 2019-05-29 15:57 shellpicker 阅读(123) 评论(0) 推荐(0)
摘要:题目大意:给定一棵 N 个节点的树,点有点权,问是否可以将整棵树分成三个权值和均相等的联通块。 题解: 直接模拟整个过程即可,记录 f[u] 表示以 u 为根的子树中的权值和,若 f[u] 为 sum/3,则割断这棵树,在代码中的具体表现为将 f[u] 置零,即:将对 u 的父节点的贡献消去。 代码 阅读全文
posted @ 2019-05-28 15:32 shellpicker 阅读(202) 评论(0) 推荐(0)
摘要:题目大意:给定一个 N 个点的无根树,现给这个树进行染色。定义一个节点是坏点,若满足与该节点相连的至少两条边是相同的颜色,求至多有 k 个坏点的情况下最少需要几种颜色才能进行合法染色。 题解:考虑一个点不是坏点的情况,必须满足与之相连的每条边颜色均不同,设最多的点的度数为 X,若一个坏点也没有,那么 阅读全文
posted @ 2019-03-20 20:35 shellpicker 阅读(421) 评论(3) 推荐(1)
摘要:题目大意:给定一个 N 个点无向图的一棵生成树和另外 M 条边,第一次去掉生成树中的一条边,第二次去掉另外 M 条边中的一条边,求有多少种情况可以使得给定的无向图不连通。 题解:首先考虑该生成树,若新增加一条边,则会在树上形成一个环,这时若删除的树边在环上,则只有将环切断才能使得图不连通;若删除的树 阅读全文
posted @ 2018-12-21 17:38 shellpicker 阅读(205) 评论(0) 推荐(0)
摘要:代码如下 cpp include using namespace std; const int maxn=5e5+10; inline int read(){ int x=0,f=1;char ch; do{ch=getchar();if(ch==' ')f= 1;}while(!isdigit(c 阅读全文
posted @ 2018-12-21 15:43 shellpicker 阅读(134) 评论(0) 推荐(0)
摘要:题目大意:给定一棵 N 个节点的有根树(其中根节点始终为 1 号节点),点有点权,点权只有 1 和 0 两种,求从根节点到叶子节点的路径中,有多少条路径满足:路径上最大连续点权为 1 的节点个数不超过 M。 题解:一开始想到了树形dp,即:$dp[i][0/1]$ 表示从根节点到该点的路径中不选/选 阅读全文
posted @ 2018-12-01 21:34 shellpicker 阅读(411) 评论(0) 推荐(0)
摘要:题目大意:给定一棵 N 个节点的树,求从 1 号节点(根节点)出发,任意节点结束,且至少经过每个节点一次的最短路径是多少。 题解:首先考虑最终要回到根节点的情况,可以发现最短路径长度一定等于该树边权的 2 倍。因此,在任意一点结束只需在答案贡献中减掉该树的一条最长链即可。 代码如下 cpp incl 阅读全文
posted @ 2018-11-30 17:44 shellpicker 阅读(279) 评论(0) 推荐(0)