J-Tree

Cosmic_Tree题解

赛时队友想到了预处理s→ts\to ts→t路径上的点最远到达的点,后面贪心做的一直wa。正解是dp。


下面的solve(l,r,op)\text{solve}(l,r,\text{op})solve(l,r,op)函数中,当l=rl=rl=r时不满足题意不合法,当op=0\text{op}=0op=0表示当前是第一个人操作,也就是第二个人走到了不合法的l=rl=rl=r的局面,而第二个人想要结果尽可能小,因此需要返回Inf\text{Inf}Inf,类似的op=1\text{op}=1op=1时返回−Inf-\text{Inf}−Inf

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
template <class T=int> T rd()
{T res=0;T fg=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();}while( isdigit(ch)) res=(res<<1)+(res<<3)+(ch^48),ch=getchar();return res*fg;
}
const int N=500010;
int h[N],e[2*N],ne[2*N],idx;
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;}
int n,s,t;
int d[N],to[N];
int f[N],cnt;
int dfs(int u,int fa)
{int fl=0;if(u==t) fl=1;for(int i=h[u];i!=-1;i=ne[i]){int v=e[i];if(v==fa) continue;int tmp=dfs(v,u);fl|=tmp;if(tmp) to[u]=v;elsed[u]=max(d[u],d[v]+1);}return fl;
}
int L[N][21],R[N][21];
int lg[N];
void init()
{lg[0]=1;for(int i=2;i<=cnt;i++) lg[i]=lg[i>>1]+1;for(int i=1;i<=cnt;i++) L[i][0]=f[i]+i-1;for(int i=1;i<=cnt;i++) R[i][0]=f[i]+cnt-i;for(int j=1;j<=lg[cnt];j++)for(int i=1;i+(1<<j)-1<=cnt;i++){L[i][j]=max(L[i][j-1],L[i+(1<<j-1)][j-1]);R[i][j]=max(R[i][j-1],R[i+(1<<j-1)][j-1]);}
}
int ql(int l,int r){int len=lg[r-l+1];return max(L[l][len],L[r-(1<<len)+1][len]);}
int qr(int l,int r){int len=lg[r-l+1];return max(R[l][len],R[r-(1<<len)+1][len]);}
int solve(int l,int r,int op)
{if(l==r){if(op==0) return 0x3f3f3f3f;elsereturn -0x3f3f3f3f;}if(op==0) return max((f[l]+l-1)-qr(l+1,r),solve(l+1,r,1));elsereturn min(ql(l,r-1)-(f[r]+cnt-r),solve(l,r-1,0));
}
int main()
{memset(h,-1,sizeof h);n=rd(),s=rd(),t=rd();for(int i=1;i<n;i++){int u=rd(),v=rd();add(u,v),add(v,u);}dfs(s,0);f[++cnt]=d[s];int tmp=s;while(tmp!=t) {tmp=to[tmp];f[++cnt]=d[tmp];}init();printf("%d\n",solve(1,cnt,0));return 0;
}

2021牛客暑期多校训练营8 J-Tree(思维dp+rmq)相关推荐

  1. 2021牛客暑期多校训练营4 E - Tree Xor 线段树 + 拆分区间

    传送门 文章目录 题意: 思路: 题意: 给你一棵树,每个点原本都有一个权值wiw_iwi​,但是你只知道相邻两个点之间的wu⊕wvw_u\oplus w_vwu​⊕wv​,问你有多少种w1,2,.. ...

  2. 2021牛客暑期多校训练营3A-Guess and lies【dp】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11254/A 题目大意 现在有一个y∈[1,n]y\in[1,n]y∈[1,n],BobBobBob每次可以选 ...

  3. 2021牛客暑期多校训练营5 D-Double Strings(dp+组合数)

    D-Double Strings fi,jf_{i,j}fi,j​表示a中前i个字符,b中前j个字符相同子序列的数量,容斥转移 fi,j=fi−1,j+fi,j−1−fi−1,j−1+{(1+fi−1 ...

  4. 2021牛客暑期多校训练营4 D-Rebuild Tree(prufer序列+树形dp)

    D-Rebuild Tree Prufer 是这样建立的:每次选择一个编号最小的叶结点并删掉它,然后在序列中记录下它连接到的那个结点.重复n−2n-2n−2次后就只剩下两个结点,算法结束.(为什么不是 ...

  5. 2021牛客暑期多校训练营9

    2021牛客暑期多校训练营9 题号 题目 知识点 A A Math Challenge B Best Subgraph C Cells D Divide-and-conquer on Tree E E ...

  6. 2021牛客暑期多校训练营5

    2021牛客暑期多校训练营5 题号 题目 知识点 A Away from College B Boxes 概率 C Cheating and Stealing D Double Strings 线性d ...

  7. 2021牛客暑期多校训练营4

    2021牛客暑期多校训练营4 题号 题目 知识点 A Course B Sample Game C LCS D Rebuild Tree E Tree Xor 思维+线段树 F Just a joke ...

  8. 2021牛客暑期多校训练营3

    2021牛客暑期多校训练营3 题号 题目 知识点 A Guess and lies B Black and white C Minimum grid 二分图匹配 D Count E Math 数论+打 ...

  9. 2021牛客暑期多校训练营2

    2021牛客暑期多校训练营2 题号 题目 知识点 A Arithmetic Progression B Cannon C Draw Grids D Er Ba Game E Gas Station F ...

最新文章

  1. GoogleFusionTablesAPI初探地图与云计算
  2. 从Netflix的Hystrix框架理解服务熔断和服务降级
  3. linux下IO口模拟I2C的一些总结
  4. GridView RadioButton 解决办法(一) -- 实现单选
  5. Element Swapping
  6. echarts自学笔记
  7. 小数分数转换c语言,这是把小数转换成分数的程序,可是输入0.6666无限循环
  8. JAVA中String类
  9. 查看ELK集群的状态命令
  10. 【Win 10 应用开发】手写识别
  11. ABBYY FineReader PDF for Mac(PDF转换工具)
  12. apache 403错误 You don't have permission to access on this server.
  13. 【转】深入浅出的讲解傅里叶变换(真正的通俗易懂)
  14. java中undefined如何解决_处理 JS中 undefined 的 7 个技巧
  15. png转ico图标的方法
  16. OPCode详解及汇编与反汇编原理
  17. 苹果CEO乔布斯脑子里怎么想的
  18. FTTB+NAT+DHCP+pppoe+CBAC+*** client+Authentication AAA
  19. SpringMVC小白问题一之启动时配置应用程序监听器错误
  20. oracle2108什么意思,Oracle存储过程(包:PACK_KPI_KERNEL For YS三度评价体系)

热门文章

  1. 查询程序崩溃日志_PC 崩溃报告途径 amp; 临时解决方法
  2. php下载文件代码 数据库,PHP备份数据库生成SQL文件并下载的函数代码
  3. python 为什么动态语言图片_聊聊动态语言那些事(Python)
  4. 算法题目——爬楼梯(动态规划)
  5. 数据结构——用栈解决回文字符问题
  6. 子串、子数组与子序列类型问题的动态规划求解(Leetcode题解-Python语言)
  7. 计算机等级delphi取消,计算机二级DELPHI控件:DELPHI过滤记录的实现方法
  8. [剑指offer]面试题8:旋转数组的最小数字
  9. 英语期末复习unit 1-2课后习题第一题及背诵段落
  10. gpio 树莓派3a+_树莓派4上市:性能飙升起售价依然是35美元