博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JLOI2014 松鼠的新家
阅读量:5247 次
发布时间:2019-06-14

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

这道题好水啊。。。不知道为什么Luogu上给到紫色难度。信息课无聊就秒掉了。。。

很容易想到将每两个点之间的点权+1,直接树剖/差分乱搞即可。

但是要注意,\(A_2\)\(A_N\)之间的点被当成起点和终点加了两次,所以输出的时候要-1。

#include 
const int max_n=300000+5;int N,cnt;int top[max_n],siz[max_n],son[max_n],father[max_n],depth[max_n];int first_edge[max_n],A[max_n],C[max_n];struct Edge{ int to,next_edge;}edge[max_n<<1];inline int read(){ register int x=0; register char ch=getchar(); while(!isdigit(ch)) ch=getchar(); while(isdigit(ch)) { x=(x<<1)+(x<<3)+ch-'0'; ch=getchar(); } return x;}inline void add_edge(int x,int y){ edge[++cnt].to=y; edge[cnt].next_edge=first_edge[x]; first_edge[x]=cnt;}inline void dfs1(int x,int fa){ depth[x]=depth[fa]+1; father[x]=fa; siz[x]=1; int maxx=-1; for(register int k=first_edge[x];k;k=edge[k].next_edge) { if(edge[k].to!=fa) { dfs1(edge[k].to,x); siz[x]+=siz[edge[k].to]; if(siz[edge[k].to]>maxx) { maxx=siz[edge[k].to]; son[x]=edge[k].to; } } }}inline void dfs2(int x,int topf){ top[x]=topf; if(!son[x]) return; dfs2(son[x],topf); for(register int k=first_edge[x];k;k=edge[k].next_edge) if(edge[k].to!=father[x] && edge[k].to!=son[x]) dfs2(edge[k].to,edge[k].to); return;}inline int LCA(int x,int y){ while(top[x]!=top[y]) { if(depth[top[x]]

转载于:https://www.cnblogs.com/zcdhj/p/8253608.html

你可能感兴趣的文章
数据清洗
查看>>
Android 动态加载 (二) 态加载机制 案例二
查看>>
MVC5 + EF6 + Bootstrap3 (10) 数据查询页面
查看>>
Windows下的Eclipse启动出现:a java runtime environment(JRE) or java development kit(JDK) must be.......
查看>>
PLC 通讯
查看>>
【读书笔记】C#高级编程 第三章 对象和类型
查看>>
python之decode、encode及codecs模块
查看>>
使用 Apache Pig 处理数据6
查看>>
Hadoop集群内lzo的安装与配置
查看>>
CASS 7.1 和 AutoCAD 2006的安装使用
查看>>
supervisor之启动rabbitmq报错原因
查看>>
Struts2工作原理
查看>>
二 、Quartz 2D 图形上下文栈
查看>>
[Leetcode Week8]Edit Distance
查看>>
针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
查看>>
ASP.NET 3.5构建Web 2.0门户站点
查看>>
PP tables for production order
查看>>
oam系统安装,windows操作系统注册列表影响系统安装
查看>>
[scrum]2011/9/25-----第五天
查看>>
《人月神话》有感,好书,推荐
查看>>