Problem 邪恶古籍

题目大意

给出一些关键点,求这棵树上到最远关键点距离小于等于d的有多少个。

Solution

一个非常简单的树形dp。然而我被这道题给玩坏了。

在经过分析以后,我们发现只需要维护两个数组,

一个数组记录这个点的上面的最远关键点(父亲那一串)到这个点的距离;

另一个数组记录这个点的子树上的最远关键点到这个点的距离。

这个应该是正解,其实也和我的做法差不多,但是较好理解。

我的垃圾做法如下:

对于每一个节点,开三个值,path,pathp,pathn。

path表示其子树上最远关键点到这个点的距离,

pathp表示其子树上次远关键点到这个点的距离,且与最远关键点不在同一颗子树上。

pathn表示其最远关键点所在的子树。

首先第一次dfs可以求出来这三个值。

然后再一次dfs,这次dfs的时候,path就变成了全树上最远关键点到这个点的距离,也就是我们最终要求的答案。

从根节点开始扫,若父亲的pathn指的不是这个点,那么这个点的path值就变成了父亲的path值+1;

如果父亲的pathn指的就是这个点,那么我们的pathp就起了作用。若pathp的值小于这个点的path值,那么就更新path值。

当然在这个dfs的过程中,也要保证维护pathp的存在。

然后为了写这玩意儿我拉低了整题的AC率,所以强烈不推荐这个奇奇怪怪的方法。

而且我还不知道是不是正解,鬼知道cf的数据强不强。所以如果有错误的话请各位指出。

反正oj上我是A掉了。

那么,最后祝各位写题愉快。

反正这题我写的是很无语的。

AC Code

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct node{
int next,to;
}e[];
bool neko[];
int n,m,d,x,u,v,path[],h[],ans=,tot=;
int pathp[],pathn[];
void add(int u,int v){
e[++tot].to=u;e[tot].next=h[v];h[v]=tot;
e[++tot].to=v;e[tot].next=h[u];h[u]=tot;
}
void dfspath(int x,int last){
path[x]=-;pathp[x]=-;
for(int i=h[x];~i;i=e[i].next){
if(e[i].to!=last){
dfspath(e[i].to,x);
if(path[x]<path[e[i].to]+){
pathp[x]=path[x];
path[x]=path[e[i].to]+;
pathn[x]=e[i].to;
}else if(pathp[x]<path[e[i].to]+)pathp[x]=path[e[i].to]+;
}
}
if(neko[x]&&path[x]<-)path[x]=;
if(neko[x]&&pathp[x]<-)pathp[x]=;
}
void dpdfs(int x,int last){
if(~last)
if(pathn[last]==x){
if(pathp[last]+>path[x]){
pathp[x]=path[x];
path[x]=pathp[last]+;
pathn[x]=;
}else if(pathp[last]+>pathp[x])pathp[x]=pathp[last]+;
}else{
if(path[last]+>path[x]){
pathp[x]=path[x];
path[x]=path[last]+;
pathn[x]=;
}else if(path[last]+>pathp[x])
pathp[x]=path[last]+;
}
if(path[x]<=d)ans++;
for(int i=h[x];~i;i=e[i].next)
if(e[i].to!=last)dpdfs(e[i].to,x);
}
int main(){
// freopen("cf337d.in","r",stdin);
memset(h,-,sizeof(h));
scanf("%d%d%d",&n,&m,&d);
for(int i=;i<=m;i++)
scanf("%d",&x),neko[x]=;
for(int i=;i<n;i++){
scanf("%d%d",&u,&v);
add(u,v);
}
dfspath(,);
dpdfs(,-);
printf("%d",ans);
}

[CF337D]邪恶古籍-树状dp的更多相关文章

  1. 树状DP (poj 2342)

    题目:Anniversary party 题意:给出N各节点的快乐指数,以及父子关系,求最大快乐指数和(没人职员愿意跟直接上司一起玩): 思路:从底向上的树状DP: 第一种情况:第i个员工不参与,F[ ...

  2. poj3659树状DP

    Cell Phone Network Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6273   Accepted: 225 ...

  3. hdu 1561 The more, The Better_树状dp

    题目链接 题意:给你一棵树,各个节点都有价值(除根节点),从根节点出发,选择m个节点,问最多的价值是多小. 思路:很明显是树状dp,遍历树时背包最优价值,dp[i][k]=max{dp[i][r]+d ...

  4. poj 2342 Anniversary party_经典树状dp

    题意:Ural大学有n个职员,1~N编号,他们有从属关系,就是说他们关系就像一棵树,父节点就是子节点的直接上司,每个职员有一个快乐指数,现在要开会,职员和职员的直接上司不能同时开会,问怎才能使开会的快 ...

  5. 树状DP HDU1520 Anniversary party

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意:职员之间有上下级关系,每个职员有自己的happy值,越高在派对上就越能炒热气氛.但是必须是 ...

  6. [Codeforces743D][luogu CF743D]Chloe and pleasant prizes[树状DP入门][毒瘤数据]

    这个题的数据真的很毒瘤,身为一个交了8遍的蒟蒻的呐喊(嘤嘤嘤) 个人认为作为一个树状DP的入门题十分合适,同时建议做完这个题之后再去做一下这个题 选课 同时在这里挂一个选取节点型树形DP的状态转移方程 ...

  7. HDU 4714 Tree2cycle(树状DP)(2013 ACM/ICPC Asia Regional Online ―― Warmup)

    Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, we need 1 ...

  8. poj2486--Apple Tree(树状dp)

    Apple Tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7789   Accepted: 2606 Descri ...

  9. 洛谷P2015 二叉苹果树(树状dp)

    题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...

随机推荐

  1. kafka 0.10.2 部署失败后,重新部署

    删除kafka各个节点log目录 删除zookeeper上kafka相关的目录 [root@m1 ~]# zkCli.sh Connecting to localhost: -- ::, [myid: ...

  2. jQuery Ajax使用FormData上传文件和其他数据,后端web.py获取

    参考博文: 通过jQuery Ajax使用FormData对象上传文件 方法一:使用<form>表单初始化FormData对象方式上传文件 前端(JQuery): <form enc ...

  3. FastReport.NET 中使用二维码

    FastReport.net 是一个比较好用的报表控件,在编辑器中编辑以后 可以直接在vs 中引用. 最近在研究fastreport 现在讲解一下 如何使用它的二维码. fastreport 没有单独 ...

  4. AWS Organizations

    AWS Organizations offers policy-based management for multiple AWS accounts and is now generally avai ...

  5. IT学习网站

    网站 网站定位 http://www.51cto.com/ 中国领先的IT技术网站. http://www.iteye.com/ 内容齐全,功能丰富的中文IT技术门户和社区网站. http://www ...

  6. docker 私有仓库搭建

    知识基础:ubuntu系统安装,docker安装,了解docker的基础知识 下载镜像(如果下载2版本以上的需要配置ssl证书,这里先用0.9.1的演示) root@ubuntu:/# docker ...

  7. 谈谈Nancy中让人又爱又恨的Diagnostics【上篇】

    前言 在Nancy中有个十分不错的功能-Diagnostics,可以说这个功能让人又爱又恨. 或许我们都做过下面这样的一些尝试: 记录某一个功能用到的相关技术信息 记录下网站的访问记录 全局配置某些框 ...

  8. 深入理解YYCache

    前言 本篇文章将带来YYCache的解读,YYCache支持内存和本地两种方式的数据存储.我们先抛出两个问题: YYCache是如何把数据写入内存之中的?又是如何实现的高效读取? YYCache采用了 ...

  9. php第三方类库定时任务

    <?php /** * Created by PhpStorm. * User: hanks * Date: 5/27/2017 * Time: 3:11 PM */ //2 .常驻内存的各种P ...

  10. ajax数据请求5(php格式)

    ajax数据请求5(php格式): <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...