博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 2286(洛谷 2495) [Sdoi2011]消耗战——虚树
阅读量:6903 次
发布时间:2019-06-27

本文共 1147 字,大约阅读时间需要 3 分钟。

题目:

   

学习(抄)了 hzwer 的代码,觉得写得很好。

有一个 “如果排序后第 i 个关键点和第 i-1 个关键点的 lca 是第 i-1 个关键点,就舍弃第 i 个关键点” 的操作,觉得很好。

把 hd[ ] 数组清空写在了 dfs 里,觉得很好。

自己一开始写了一个倍增找链上边权最小值,用来给虚树的边赋值,参考之后发现只要记录一个 “到根的路径上的最小边权” 就行了。

#include
#include
#include
#define ll long longusing namespace std;int rdn(){ int ret=0;bool fx=1;char ch=getchar(); while(ch>'9'||ch<'0'){
if(ch=='-')fx=0;ch=getchar();} while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar(); return fx?ret:-ret;}ll Mx(ll a,ll b){
return a>b?a:b;}ll Mn(ll a,ll b){
return a
=0;t--) if(pre[x][t]!=pre[y][t]) x=pre[x][t],y=pre[y][t]; return pre[x][0];}namespace Tr{ int hd[N],xnt,to[N],nxt[N]; int p[N],tot,sta[N],top; ll dp[N]; void add(int x,int y){to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;} void get_tr() { xnt=0; sort(p+1,p+tot+1,cmp); int lm=tot; p[tot=1]=p[1]; for(int i=2;i<=lm;i++) if(get_lca(p[i],p[tot])!=p[tot])p[++tot]=p[i]; sta[top=1]=1; for(int i=1;i<=tot;i++) { int u=p[i], lca=get_lca(u,sta[top]); while(top&&dfn[lca]

 

转载于:https://www.cnblogs.com/Narh/p/10429853.html

你可能感兴趣的文章
实用命令行工具详解—crontab
查看>>
code review
查看>>
我的心灵旅程:2019重新开始
查看>>
设置vim根据文件类型选择相应的编译器
查看>>
redis+ssh-keygen免认证登录案例
查看>>
HTML_后台框架全屏界面_fixed形式布局
查看>>
为什么使用 SLF4J 而不是 Log4J 来做 Java 日志
查看>>
顺丰快递接口
查看>>
淘宝技术发展(个人网站)
查看>>
处理 emoji 表情
查看>>
Dev-No.02 HTTP Status状态汇总
查看>>
linux svn命令
查看>>
Android中获取CPU负载和进程cpu时间
查看>>
docker容器启动后添加端口映射
查看>>
Android新姿势:3D翻转效果原理
查看>>
Xtrabackup系列之:二进制安装
查看>>
Context []startup failed due to previous errors 错误
查看>>
RPM(RedHat Package Manager)
查看>>
iOS开源项目周报0302
查看>>
linux入门介绍
查看>>