[JLOI2014]松鼠的新家

嘟嘟嘟

 

这还是一道树链剖分板子题呀!

从1到n - 1枚举a[i],每一次使节点a[i]到a[i + 1]的路径加1,但这样的话除a[1],每一个点都多加了一个1,所以输出答案的时候减1即可。

  1 #include<cstdio>
  2 #include<iostream>
  3 #include<algorithm>
  4 #include<cmath>
  5 #include<cstring>
  6 #include<cstdlib>
  7 #include<cctype>
  8 #include<stack>
  9 #include<queue>
 10 #include<vector>
 11 using namespace std;
 12 #define enter puts("")
 13 #define space putchar(' ')
 14 #define Mem(a) memset(a, 0, sizeof(a))
 15 typedef long long ll;
 16 typedef double db;
 17 const int INF = 0x3f3f3f3f;
 18 const db eps  =1e-8;
 19 const int maxn = 3e5 + 5;
 20 inline ll read()
 21 {
 22     ll ans = 0;
 23     char ch = getchar(), last = ' ';
 24     while(!isdigit(ch)) {last = ch; ch = getchar();}
 25     while(isdigit(ch)) {ans = ans * 10 + ch - '0'; ch = getchar();}
 26     if(last == '-') ans = -ans;
 27     return ans;
 28 }
 29 inline void write(ll x)
 30 {
 31     if(x < 0) putchar('-'), x = -x;
 32     if(x >= 10) write(x / 10);
 33     putchar(x % 10 + '0');
 34 }
 35 
 36 int n, a[maxn];
 37 vector<int> v[maxn];
 38 
 39 bool vis[maxn];
 40 int fa[maxn], dep[maxn], size[maxn], son[maxn];
 41 void dfs1(int now)
 42 {
 43     vis[now] = 1; size[now] = 1;
 44     for(int i = 0; i < (int)v[now].size(); ++i)
 45     {
 46         if(!vis[v[now][i]])
 47         {
 48             fa[v[now][i]] = now;
 49             dep[v[now][i]] = dep[now] + 1;
 50             dfs1(v[now][i]);
 51             size[now] += size[v[now][i]];
 52             if(!son[now] || size[v[now][i]] > size[son[now]]) son[now] = v[now][i];
 53         }
 54     }
 55 }
 56 int top[maxn], dfsx[maxn], pos[maxn], cnt = 0;
 57 void dfs2(int now)
 58 {
 59     vis[now] = 1;
 60     dfsx[now] = ++cnt; pos[cnt] = now;
 61     if(son[now])
 62     {
 63         top[son[now]] = top[now];
 64         dfs2(son[now]);
 65     }
 66     for(int i = 0; i < (int)v[now].size(); ++i)
 67     {
 68         if(!vis[v[now][i]] && v[now][i] != son[now])
 69         {
 70             top[v[now][i]] = v[now][i];
 71             dfs2(v[now][i]);
 72         }
 73     }
 74 }
 75 
 76 int l[maxn << 2], r[maxn << 2];
 77 ll sum[maxn << 2], lazy[maxn << 2];
 78 void build(int L, int R, int now)
 79 {
 80     l[now] = L; r[now] = R;
 81     if(L == R) return;
 82     int mid = (L + R) >> 1;
 83     build(L, mid, now << 1);
 84     build(mid + 1, R, now << 1 | 1);
 85 }
 86 void pushdown(int now)
 87 {
 88     if(lazy[now])
 89     {
 90         sum[now << 1] += (r[now << 1] - l[now << 1] + 1) * lazy[now];
 91         sum[now << 1 | 1] += (r[now << 1 | 1] - l[now << 1 | 1] + 1) * lazy[now];
 92         lazy[now << 1] += lazy[now];
 93         lazy[now << 1 | 1] += lazy[now];
 94         lazy[now] = 0;
 95     }
 96 }
 97 void update(int L, int R, int now)
 98 {
 99     if(l[now] == L && r[now] == R) 
100     {
101         sum[now] += r[now] - l[now] + 1; 
102         lazy[now]++; return;
103     }
104     pushdown(now);
105     int mid = (l[now] + r[now]) >> 1;
106     if(R <= mid) update(L, R, now << 1);
107     else if(L > mid) update(L ,R, now << 1 | 1);
108     else {update(L, mid, now << 1); update(mid + 1, R, now << 1 | 1);}
109     sum[now] = sum[now << 1] + sum[now << 1 | 1];
110 }
111 ll query(int id, int now)
112 {
113     if(l[now] == r[now]) return sum[now];
114     pushdown(now);
115     int mid = (l[now] + r[now]) >> 1;
116     if(id <= mid) return query(id, now << 1);
117     else return query(id, now << 1 | 1);
118 }
119 
120 void update2(int x, int y)
121 {
122     
123     while(top[x] != top[y])
124     {
125         if(dep[top[x]] < dep[top[y]]) swap(x, y);
126         update(dfsx[top[x]], dfsx[x], 1);
127         x = fa[top[x]];    
128     }
129     if(dfsx[x] > dfsx[y]) swap(x, y);
130     update(dfsx[x], dfsx[y], 1);
131 }
132 
133 ll ans[maxn];
134 
135 int main()
136 {
137     n = read();
138     for(int i = 1; i <= n; ++i) a[i] = read();
139     for(int i = 1; i < n; ++i)
140     {
141         int x = read(), y = read();
142         v[x].push_back(y); v[y].push_back(x);
143     }
144     dfs1(1); Mem(vis); dfs2(1);
145     build(1, cnt, 1);
146     for(int i = 1; i < n; ++i) update2(a[i], a[i + 1]);        
147     for(int i = 1; i <= n; ++i) {write(query(dfsx[i], 1) - (a[1] == i ? 0 : 1)); enter;}
148     return 0;
149 }
View Code

 

转载于:https://www.cnblogs.com/mrclr/p/9493498.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367724.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS3-背景(background-image、background-size、background-origin、background-clip)

CSS3中新的背景属性&#xff1a;background-image、background-size、background-origin、background-clip 背景图片&#xff1a;background-image CSS3中可以通过background-image属性添加背景图片。 不同的背景图像和图像用逗号隔开&#xff0c;所有的图片中显示在最顶端的为…

使用String.intern()减少内存使用

时不时地会有一个垂死的生产应用程序。 而且您知道您需要尽快对其进行修补。 我们也一样&#xff0c;并认为分享最近的一个战争故事将很有趣。 在这种情况下&#xff0c;我们就有机会使用String.intern&#xff08;&#xff09;之类的简单补丁来修补应用程序。 但是&#xff0c…

CSS实现比翼双飞和圣杯布局模型效果

圣杯模型和比翼双飞模型主要的特指1.首先加载的是中间部分&#xff0c;其次是左边&#xff0c;然后是右边 2.中间是自适应&#xff0c;二边是定宽 实现方法1.grid2.margin float position:releative父亲加padding 挤进去3.margin float box-size:border-box 1.gridhtml:&l…

jmeter创建高级测试计划

如果应用程序使用重写地址而不是使用cookie存储信息&#xff0c;需要做一些额外的工作去测试程序 为了正确的响应重写地址&#xff0c;jmeter 需要解析 从服务器获取html 并且检索会话ID, 1 合理利用pre-processors-http url rewriting modifier 来完成&#xff0c;简单的输入s…

单元测试技巧:创建描述性测试

您的单元测试应尽可能具有描述性。 他们给您的反馈应该非常清楚&#xff0c;您甚至不需要启动调试器并一步一步地检查代码来检查局部变量。 为什么&#xff1f; 因为那需要时间&#xff0c;而且我们很懒&#xff0c;对吗&#xff1f; 为此&#xff0c;您需要创建描述性测试。 有…

vue.js--基础事件定义,获取数据,执行方法传值

<template><div id"app"> <h1>{{ msg }}</h1> <br> <button v-on:click"run1()"> 第一种写法</button> <br> <button clickrun2()> 第二种写法</button> <br> <button clickgetMsg(…

Spring集成–强大的拆分器聚合器

坚固是什么意思&#xff1f; 在本文的上下文中&#xff0c;健壮性是指在不立即返回到调用者的情况下管理流中的异常条件的能力。 在某些处理方案中&#xff0c; n个 m个回答足以做出结论。 通常具有这些趋势的示例处理场景是&#xff1a; 财务&#xff0c;保险和预订系统的…

填充一个池需要多少个线程?

近几个月来&#xff0c;我们一直看到一小部分但持续的操作失败&#xff0c;并带有一个奇怪的异常– org.springframework.jdbc.CannotGetJdbcConnectionException –“无法获得JDBC连接&#xff1b; 嵌套异常是java.sql.SQLException&#xff1a;客户端尝试检出Connection的尝试…

@font-face 用字体画图标

HTML 1 <body>2 <!-- ul.layout>li*5>a[href#]>i.icon -->3 <!-- Sublime Text 快捷拼写 -->4 <ul class"layout">5 <li><a href"#"><i class"icon">&#xe601;</…

java mapfile_基于文件的数据结构:关于MapFile

MapFile是已经排过序的SequenceFile&#xff0c;它有索引&#xff0c;所以可以按键查找1.MapFile的写操作MapFile的写操作类似于SequenceFile的写操作。新建一个MapFile.Writer实例&#xff0c;然后调用append()方法顺序写入文件内容。如果不按顺序写入&#xff0c;就抛出一个I…

java 循环依赖_解决Java循环依赖的问题

最近看到一个问题&#xff1a;如果有两个类A和B&#xff0c;A类中有一个B的对象b&#xff0c;B类中有一个A的对象a&#xff0c;那么如何解决这两个类的相互依赖关系呢&#xff0c;几天就给大家说一下Java的循环依赖&#xff0c;raksmart服务器。举个栗子1&#xff1a;可以看到A…

Intellij IDEA 将工程转换成maven工程 详解

1> 右键工程&#xff0c;点击 Add Framework Support2> 选中 Maven&#xff0c;再点击 OK3> 工程根目录自动生成 pom.xml 文件&#xff0c;这样 工程就支持 Maven版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 http://blog.csdn.net/che…

数据结构(七)排序---直接插入排序(稳定)

经典排序算法----直接插入排序算法及其改进&#xff08;稳定&#xff09; 定义&#xff1a; 直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中&#xff0c;从而得到一个新的&#xff0c;记录数加一的有序表。 实现思想 我们预留了一个哨兵&#xff0c;这里我们将…

java嵌套类型 无法隐藏外层类型_java内部类深入详解 内部类的分类 特点 定义方式 使用...

java内部类 内部类的分类 特点 定义方式 使用 外部类调用内部类 多层嵌套内部类 内部类访问外部类属性 接口中的内部类 内部类的继承 内部类的覆盖 局部内部类 成员内部类 静态内部类 匿名内部类内部类定义将一个类定义放到另一个类的内部,这就是内部类内部类与组合是完…

java.io.FileNotFoundException: generatorConfig.xml (系统找不到指定的文件。)

在使用MyBatis的逆向工程生成代码时&#xff0c;一直报错java.io.FileNotFoundException: generatorConfig.xml (系统找不到指定的文件。)&#xff0c;如图 文件结构如下&#xff1a; 代码如下&#xff1a; import java.io.File; import java.util.ArrayList; import java.util…

java机器学习库_Amazon Deep Java Library——Java 机器学习工具箱

近年来&#xff0c;人们对机器学习的兴趣稳步增长。具体来说&#xff0c;现在&#xff0c;企业在各种各样的场景中使用机器学习进行图像识别。它在汽车工业、医疗保健、安全、零售、仓库、农场和农业的自动化产品跟踪、食品识别&#xff0c;甚至通过手机摄像头进行实时翻译等方…

阻抗计算

si9000也可以算 一般有点差异&#xff0c;板厂可以微调 加上滤油&#xff0c;实际阻抗会降低2-3欧 影响最大的是层厚 先选择最薄的芯板&#xff0c;注意差分线的阻抗匹配&#xff0c;间距越小&#xff0c;阻抗小&#xff0c; 转载于:https://www.cnblogs.com/IotI/p/8587277.h…

javascript mqtt 发布订阅消息

js client使用paho-mqtt&#xff0c;官网地址&#xff1a;http://www.eclipse.org/paho/&#xff0c;参考http://www.eclipse.org/paho/clients/js/官网给出例子Getting Started&#xff0c;写出下面简单的测试代码。 <!DOCTYPE html> <html> <head> <met…

用C++调用tensorflow在python下训练好的模型(centos7)

本文主要参考博客https://blog.csdn.net/luoyexuge/article/details/80399265 [1] bazel安装参考:https://blog.csdn.net/luoyi131420/article/details/78585989 [2] 首先介绍下自己的环境是centos7&#xff0c;tensorflow版本是1.7&#xff0c;python是3.6&#xff08;anacond…

ActiveMQ producer同步/异步发送消息

http://activemq.apache.org/async-sends.html producer发送消息有同步和异步两种模式&#xff0c;可以通过代码配置&#xff1a; ((ActiveMQConnection)connection).setUseAsyncSend(true); producer默认是异步发送消息。在没有开启事务的情况下&#xff0c;producer发送持久化…