2020牛客暑期多校训练营The Flee Plan of Groundhog(树形DP)
The Flee Plan of Groundhog
题目描述
样例
input:
7 2
1 2
2 5
5 7
5 6
3 6
3 4
output:
1
题目大意
土拨鼠和OrangeOrangeOrange同住在一棵树上。现在,土拨鼠去看望OrangeOrangeOrange,他从1号结点出发,OrangeOrangeOrange住在nnn号结点。土拨鼠速度为1m/s1m/s1m/s,ttt秒之后,OrangeOrangeOrange发现自己发烧了,为了传染给土拨鼠,他以2m/s2m/s2m/s的速度追赶以1m/s1m/s1m/s速度逃跑的土拨鼠。
现在给定n,tn,tn,t和树,要求土拨鼠从走向OrangetOrange\,tOranget秒之后,他有多少时间可以存活。
分析
第一步肯定是找到土拨鼠ttt秒之后的位置,这个很简单,求个深度和每个节点的父节点然后从nnn开始向上跳即可。
接下来就是比较麻烦的求最长的那条路径。
我们第一想到的就是以现在土拨鼠的位置为根,除了nnn那条链以外的链求最长的即可,你当然不会迎着OrangeOrangeOrange走过去。但是很快就发现十分的不对。
不如我们看下面这种情况:
如果土拨鼠当前的位置在2,那么显然依照上面的策略,土拨鼠会在1号结点等死。但是还有个更优的策略就是向着OrangeOrangeOrange走一步,然后拐到456745674567那条链上可以存活更久。
那么这个应该怎么搞呢??
我们不妨把OrangeOrangeOrange和土拨鼠到达每个节点的时间都标出来:
蓝色是土拨鼠,橙色是OrangeOrangeOrange。
相应地,土拨鼠肯定是不能到达橙色小于等于蓝色的点的因为这样,OrangeOrangeOrange就可以直接抓住他了。因此对于每条链,一旦找到一个不合法的点,那么这个点的父节点就是土拨鼠向这条链能走的最远的路,ansansans只要取这个点OrangeOrangeOrange所需要的时间就可以了。
那么如果整条链都是合法的,显然,取叶节点就可以了。
所以,3个dfsdfsdfs爆搜,出答案。
暴力出奇迹
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=1e5+100;
vector<int> vec[MAXN];//存边
int dep[MAXN],fa[MAXN],cs,blk[MAXN];
//blk Orange的时间 fa 父节点 dep 两个用处,见下面注释
int n,t,ans;
void dfs(int x,int depth,int fx)
{dep[x]=depth;for(int i=0;i<vec[x].size();i++){int s=vec[x][i];if(s==fx) continue;fa[s]=x;dfs(s,depth+1,x);}
}//预处理的dfs,先求出以1为根的向n的dep,然后方能求ts后现在的位置
//后面的用处是找土拨鼠的时间,存在dep里
void dfs1(int x,int depth,int fx)
{blk[x]=depth/2;for(int i=0;i<vec[x].size();i++){int s=vec[x][i];if(s==fx) continue;dfs1(s,depth+1,x);}
}//找Orange的时间,存在blk里
void getans(int x,int fx)
{bool fl=0;for(int i=0;i<vec[x].size();i++){int s=vec[x][i]; if(s==fx) continue;fl=1;if(dep[s]>=blk[s]){//不合法的点ans=max(blk[x],ans);continue;}getans(s,x);}if(!fl){ans=max(ans,blk[x]);}//叶节点
}//然后以当前位置为根,找到每条链能走的最远的地方
int main()
{int x,y;scanf("%d%d",&n,&t);for(int i=1;i<n;i++){scanf("%d%d",&x,&y);vec[x].push_back(y);vec[y].push_back(x);}dfs(1,0,-1);int gol=dep[n]-t,rt;//gol 走完ts后与n的距离 rt 根if(gol<=0){puts("0");return 0;}//如果ts后已经到了,那么Orange就直接抓住了土拨鼠for(int i=n,j=gol+1;j;i=fa[i],j--) rt=i;//找出t秒之后当前的位置,rtmemset(dep,0,sizeof(dep));memset(blk,0,sizeof(blk));dfs(rt,0,-1);//得出土拨鼠的时间dfs1(n,1,-1);//得出Orange的时间ans=-1;getans(rt,-1);//得出答案printf("%d\n",ans);
}
END
这题可以只用一个dfs,然后思路差不多,只不过把时间换成是这个节点到两人的距离,用lcalcalca就可以过。其实没有什么本质的差别,但是我的做法还是被DNdalaoDNdalaoDNdalao嫌弃了wuwuwu……
2020牛客暑期多校训练营The Flee Plan of Groundhog(树形DP)相关推荐
- 2020牛客暑期多校训练营(第九场)E题 Groundhog Chasing Death
题意 计算 ∏ i = a b ∏ j = c d g c d ( x i , y j ) \prod_{i=a}^{b}\prod_{j=c}^{d}gcd(x^i,y^j) i=a∏bj=c∏d ...
- 2020牛客暑期多校训练营(第九场) Groundhog Chasing Death
Groundhog Chasing Death 题意:给出a.b.c.d.x.y,让求下列式子. 思路:对于gcd(x,y)我们知道 gcd(x,y)=p1 ^(min(n1,n2)) * p2 ^( ...
- 2020牛客暑期多校训练营(第六场)
2020牛客暑期多校训练营(第六场) 额,睡了一下午,直接错过了比赛... 文章目录 A African Sort 题意: 题解: 代码: B Binary Vector C Combination ...
- 2020牛客暑期多校训练营(第四场)
2020牛客暑期多校训练营(第四场) 这场属实有点难受 文章目录 A Ancient Distance B Basic Gcd Problem 题目 代码: C Count New String D ...
- 2020牛客暑期多校训练营(第一场)
文章目录 A B-Suffix Array B Infinite Tree C Domino D Quadratic Form E Counting Spanning Trees F Infinite ...
- 2020牛客暑期多校训练营(第二场)
2020牛客暑期多校训练营(第二场) 最烦英语题 文章目录 A All with Pairs B Boundary C Cover the Tree D Duration E Exclusive OR ...
- 2020牛客暑期多校训练营(第七场)J.Pointer Analysis
2020牛客暑期多校训练营(第七场)J.Pointer Analysis 题目链接 题目描述 Pointer analysis, which aims to figure out which obje ...
- 2020牛客暑期多校训练营(第三场)A.Clam and Fish
2020牛客暑期多校训练营(第三场)A.Clam and Fish 题目链接 题目描述 There is a fishing game as following: The game contains ...
- 2020牛客暑期多校训练营(第五场)——E Bogo Sort
2020牛客暑期多校训练营(第五场)--E Bogo Sort 题目描述 Today Tonnnny the monkey learned a new algorithm called Bogo So ...
- E Groundhog Chasing Death(2020牛客暑期多校训练营(第九场))(思维+费马小定理+质因子分解)
E Groundhog Chasing Death(2020牛客暑期多校训练营(第九场))(思维+费马小定理+质因子分解) 链接:https://ac.nowcoder.com/acm/contest ...
最新文章
- AI框架精要:设计思想
- JS魔法堂:不完全国际化本地化手册 之 拓展篇
- Webshell免杀绕过waf
- Go之Beego原生查询QueryRow QueryRows Values ValuesList ValuesFlat RowsToMap RowsToStruct
- python输入一个人的名字_怎样用c语言做到输入一个人的名字才会输出一个心?
- 杂谈——杭州考驾照历程
- YbtOJ#791-子集最值【三维偏序】
- 更改oracle背景,Oracle 11gR2修改用户后导致系统HANG住
- VC中连接mdb数据库及其数据读取方法
- Google回应全球宕机:磁盘满了;摩拜App昨晚正式停止服务;Docker Desktop 3.0.0发布|极客头条...
- 华大MCU在IAR下的调试环境搭建及相关补丁包(百度网盘链接)
- 利用云计算来实现业务转型呢,有五个步骤可以遵循
- 软件工程概述思维导图总结(二)
- (30)tensorboard ValueError: Duplicate plugins for name projector
- DNC: A deep neural network-based clustering-oriented network embedding algorithm 2021
- 修改docker ip网段
- ios 配置了代理且使用 chls.pro/ssl 下载不了证书,无法弹出下载证书的提示
- 炔烃+叠氮“点击化学”(Click chemistry)试剂,你值得拥有
- TextGrabber重大更新,识别文字并实时离线翻译,支持中文
- Android 获取指定图片或文件的大小