【 2017 Multi-University Training Contest - Team 9 && hdu 6162】Ch’s gift
【链接】h在这里写链接
【题意】
【题解】
【错的次数】
【反思】
【代码】
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std; const int N = 1e5; int n, m, c[N + 10], uppest[N + 10], idx[N + 10], cnt, sz[N + 10], dep[N + 10];
long long sum[(N + 10) << 2];
int mi[(N + 10) << 2], ma[(N + 10) << 2], a, b, fat[N + 10];
vector <int> g[N + 10]; void dfs1(int x, int fa) {
sz[x] = 1;
for (int y : g[x]) {
if (y == fa) continue;
dep[y] = dep[x] + 1;
dfs1(y, x);
sz[x] += sz[y];
fat[y] = x;
}
} void dfs2(int x, int chain) {
idx[x] = ++cnt;
uppest[x] = chain;
int ma = 0;
for (int y : g[x]) {
if (dep[y] > dep[x] && sz[y] > sz[ma]) {
ma = y;
}
}
if (ma == 0) return;
dfs2(ma, chain);
for (int y : g[x])
if (dep[y] > dep[x] && y != ma)
dfs2(y, y);
} void updata(int pos, int x, int l, int r, int rt) {
if (l == r) {
mi[rt] = ma[rt] = x;
sum[rt] = x;
return;
}
int m = (l + r) >> 1;
if (pos <= m)
updata(pos, x, l, m, rt << 1);
else
updata(pos, x, m + 1, r, rt << 1 | 1);
ma[rt] = max(ma[rt << 1 | 1], ma[rt << 1]);
mi[rt] = min(mi[rt << 1 | 1], mi[rt << 1]);
sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
} void pre() {
for (int i = 1; i <= n; i++)
updata(idx[i], c[i], 1, n, 1);
} long long get_ans(int L, int R, int l, int r, int rt) {
if (L <= l && r <= R) {
if (ma[rt] < a) return 0;
if (mi[rt] > b) return 0;
if (a <= mi[rt] && ma[rt] <= b) return sum[rt];
}
int m = (l + r) >> 1;
long long temp = 0;
if (L <= m)
temp += get_ans(L, R, l, m, rt << 1);
if (m < R)
temp += get_ans(L, R, m + 1, r, rt << 1 | 1);
return temp;
} long long calc(int x, int y) {
long long temp = 0;
while (uppest[x] != uppest[y]) {
if (dep[uppest[x]] > dep[uppest[y]]) swap(x, y);
//dep[x] < dep[y] ok
temp += get_ans(idx[uppest[y]], idx[y], 1, n, 1);
y = fat[uppest[y]];
}
if (dep[x] > dep[y]) swap(x, y);
temp += get_ans(idx[x], idx[y], 1, n, 1);
return temp;
} void deal() {
for (int i = 1; i <= m; i++) {
int s, t;
cin >> s >> t >> a >> b;
cout << calc(s, t);
if (i == m)
cout << endl;
else
cout << ' ';
}
} int main() {
//freopen("F:\\rush.txt", "r", stdin);
ios::sync_with_stdio(0), cin.tie(0); while (cin >> n >> m) {
for (int i = 1; i <= n; i++) cin >> c[i];
for (int i = 1; i <= n; i++) g[i].clear();
for (int i = 1; i <= n - 1; i++) {
int x, y;
cin >> x >> y;
g[x].push_back(y), g[y].push_back(x);
} dep[1] = 0;
dfs1(1, 0);
cnt = 0;
dfs2(1, 1); pre(); deal();
}
return 0;
}
【 2017 Multi-University Training Contest - Team 9 && hdu 6162】Ch’s gift的更多相关文章
- 【2017 Multi-University Training Contest - Team 7 && hdu 6121】Build a tree
[链接]点击打开链接 [题意] 询问n个点的完全k叉树,所有子树节点个数的异或总和为多少. [题解] 考虑如下的一棵k=3叉树,假设这棵树恰好有n个节点. 因为满的k叉树,第i层的节点个数为k^(i- ...
- 【HDU 6162】 Ch’s gift
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6162 [算法] 离线树剖 我们知道,u到v路径上权值为[A,B]的数的和 = u到v路径上权值小于 ...
- 2017 Multi-University Training Contest - Team 2 &&hdu 6050 Funny Function
Funny Function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 2017 Multi-University Training Contest - Team 2 &&hdu 6053 TrickGCD
TrickGCD Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- 2017 Multi-University Training Contest - Team 2&&hdu 6047 Maximum Sequence
Maximum Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 2017 Multi-University Training Contest - Team 2 &hdu 6055 Regular polygon
Regular polygon Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
- 【2017中国大学生程序设计竞赛 - 网络选拔赛 && hdu 6154】CaoHaha's staff
[链接]点击打开链接 [题意] 给你一个面积,让你求围成这个面积最少需要几条边,其中边的连线只能是在坐标轴上边长为1的的线或者是两个边长为1 的线的对角线. [题解] 找规律题 考虑s[i]表示i条边 ...
- 【2017中国大学生程序设计竞赛 - 网络选拔赛 hdu 6150】Vertex Cover
[链接]点击打开链接 [题意] 有人写了一个最小点覆盖的贪心算法,然后,让你去hack它. 并且,要求这个算法得到的错误答案,是正确答案的三倍. 让你任意输出hack数据,点数<=500 [题解 ...
- 2017 Multi-University Training Contest - Team 1 1006&&HDU 6038 Function【DFS+数论】
Function Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total ...
随机推荐
- 洛谷 P1964 【mc生存】卖东西
P1964 [mc生存]卖东西 题目背景 服务器好好玩 题目描述 lcy0x1去服务器的系统商店卖东西. 一个人的背包有21格. 一开始他的背包里有m件不同的物品(不能卖). 他要卖n种物品,每种物品 ...
- 文件/文件夹权限设置命令chmod的具体使用方法
chmod是文件/文件夹权限设置的命令,在Linux中常常遇到.本博文下面总结chmod的具体使用方法. Linux/Unix的档案调用权限分为三级,即档案拥有者user.群组group.其它othe ...
- SQL Server 函数的使用 Function
create table student ( id varchar2(5) primary key, name varchar2(20) not null, sex char(2) check(sex ...
- 获取个人借阅信息---图书馆client
在上一篇利用jsoup解析个人信息----图书馆client,获得个人基本信息后.便有了进一步的需求:获取当前借阅的具体信息 获取的方法还是一样的.利用jsoup解析借阅信息页面,获得所需数据,封装成 ...
- Android自己定义动态布局 — 多图片上传
Android自己定义动态布局 - 多图片上传 本文介绍Android中动态布局加入图片,多图片上传. 项目中效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5 ...
- Android与webserver数据交互编程---3网络爬虫项目实现虚拟浏览器的jsp后台执行
背景:原先的b/s设计中在一个jsp界面中实现多个复杂的工作流... 为实现移动接口的调用保证工作流的正常webproject特别给提供了该虚拟浏览器的方案 原理:通过该方案实现虚拟浏览器后台运行js ...
- FocusChange-焦点变化监听事件
想要监听一个控件的焦点变化情况,发现了一个 view.setOnFocusChangeListener(new OnFocusChangeListener() { ...... } 现在写一个小dem ...
- powershell《语音报警系统》
用powershell实现:“倩女幽魂姥姥”版<语音报警系统> ------[第一章 前言]------ win7,及以上版本中,是自带语音库的,系统自带一套女声中文库,一套女声英文库.用 ...
- SKU=Stock Keeping Unit(库存量单位)。即库存进出计量的单位,可以是以件,盒,托盘等为单位
SKU=Stock Keeping Unit(库存量单位).即库存进出计量的单位,可以是以件,盒,托盘等为单位.SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法.现在已经被引申为产品 ...
- 分享一个css3学习使用的选择器手册
http://www.haorooms.com/tools/css_selecter/