LibreOJ #6192. 「美团 CodeM 复赛」城市网络
题目描述
有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接的连通图),首都为 111 号城市,每个城市售卖价值为 aia_iai 的珠宝。
你是一个珠宝商,现在安排有 qqq 次行程,每次行程为从 uuu 号城市前往 vvv 号城市(走最短路径),保证 vvv 在 uuu 前往首都的最短路径上。
在每次行程开始时,你手上有价值为 ccc 的珠宝(每次行程可能不同),并且每经过一个城市时(包括 uuu 和 vvv),假如那个城市中售卖的珠宝比你现在手上的每一种珠宝都要优秀(价值更高,即严格大于),那么你就会选择购入。
现在你想要对每一次行程,求出会进行多少次购买事件。
输入格式
第一行,两个正整数 n,qn , qn,q。
第二行,nnn 个正整数 aia_iai 描述每个城市售卖的珠宝的价值。
接下来 n−1n-1n−1 行,每行描述一条道路 x,yx , yx,y (1≤x,y≤n1 \leq x , y \leq n1≤x,y≤n),表示有一条连接 xxx 和 yyy 的道路。
接下来 qqq 行,每行描述一次行程 u,v,cu , v , cu,v,c (1≤u,v≤n1 \leq u , v \leq n1≤u,v≤n)。
输出格式
对于每次行程输出一行,为所购买次数。
样例
样例输入
5 4
3 5 1 2 4
1 2
1 3
2 4
3 5
4 2 1
4 2 2
4 2 3
5 1 5
样例输出
2
1
1
0
数据范围与提示
#include<iostream>
#include<cstdio>
#define maxn 100010
using namespace std;
int n,q,w[maxn],num,head[maxn],fa[maxn],dis[maxn],dep[maxn];
struct node{
int to,pre;
}e[maxn*];
void Insert(int from,int to){
e[++num].to=to;
e[num].pre=head[from];
head[from]=num;
}
void dfs(int now,int father){
dep[now]=dep[father]+;
fa[now]=father;
for(int i=head[now];i;i=e[i].pre){
int to=e[i].to;
if(to==father)continue;
dfs(to,now);
}
}
int main(){
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++)scanf("%d",&w[i]);
int x,y,z;
for(int i=;i<n;i++){
scanf("%d%d",&x,&y);
Insert(x,y);Insert(y,x);
}
dfs(,);
while(q--){
scanf("%d%d%d",&x,&y,&z);
if(dep[x]<dep[y])swap(x,y);
int cnt=;
while(x!=y){
if(w[x]>z)cnt++,z=w[x];
x=fa[x];
}
if(w[y]>z)cnt++;
printf("%d\n",cnt);
}
}
40分 暴力
#include<iostream>
#include<cstdio>
#define maxn 200001
using namespace std;
int fa[maxn<<][];
int num,head[maxn<<],val[maxn<<];
int d[maxn<<],dep[maxn<<],Dec[maxn<<];
struct node{
int to,pre;
}e[maxn*];
void Insert(int from,int to){
e[++num].to=to;
e[num].pre=head[from];
head[from]=num;
}
void dfs(int now,int father){
int pos=father;
for(int i=;i>=;i--)
if(fa[pos][i]&&d[fa[pos][i]]<=d[now])pos=fa[pos][i];
if(d[pos]>d[now])fa[now][]=pos;
else fa[now][]=fa[pos][];
for(int i=;fa[fa[now][i-]][i-];i++)fa[now][i]=fa[fa[now][i-]][i-];
dep[now]=dep[father]+;
for(int i=head[now];i;i=e[i].pre)
if(e[i].to!=father)dfs(e[i].to,now);
}
int main(){
freopen("Cola.txt","r",stdin);
int n,q;
scanf("%d%d",&n,&q);
int x,y,z;
for(int i=;i<=n;i++)scanf("%d",&d[i]);
for(int i=;i<n;i++){
scanf("%d%d",&x,&y);
Insert(x,y);Insert(y,x);
}
int c;
for(int i=;i<=q;i++){
scanf("%d%d%d",&x,&y,&z);
Insert(n+i,x);Insert(x,n+i);
d[n+i]=z;
Dec[i]=y;
}
dfs(,);
int ans,pos,t;
for(int i=n+;i<=n+q;i++){
ans=;
pos=i;
t=Dec[i-n];
for(int j=;j>=;j--)
if(dep[fa[pos][j]]>=dep[t])
ans+=<<j,pos=fa[pos][j];
printf("%d\n",ans);
}
}
100分 倍增
LibreOJ #6192. 「美团 CodeM 复赛」城市网络的更多相关文章
- LOJ #6192. 「美团 CodeM 复赛」城市网络 (树上倍增)
#6192. 「美团 CodeM 复赛」城市网络 内存限制:64 MiB 时间限制:500 ms 标准输入输出 题目描述 有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接 ...
- 「美团 CodeM 复赛」城市网络
题目链接 题意分析 首先 \([u,v]\)在树上是一条深度递增的链 那么我们可以使用倍增找 \(x\)的祖先当中深度最大的值大于\(x\)的点 然后维护一个\(pre\) 重新建树 这样从\(x\) ...
- LibreOJ #6191. 「美团 CodeM 复赛」配对游戏
二次联通门 : LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 /* LibreOJ #6191. 「美团 CodeM 复赛」配对游戏 概率dp */ #include <cs ...
- 美团 CodeM 复赛」城市网络
美团 CodeM 复赛」城市网络 内存限制:64 MiB时间限制:500 ms标准输入输出 题目描述 有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接的连通图),首都为 11 ...
- LibreOJ #6212. 「美团 CodeM 决赛」melon
二次联通门 : LibreOJ #6212. 「美团 CodeM 决赛」melon /* LibreOJ #6212. 「美团 CodeM 决赛」melon MDZZ 这是决赛题?? */ #incl ...
- 【loj6191】「美团 CodeM 复赛」配对游戏 概率期望dp
题目描述 n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈.问最终栈中元素个数的期望是多少. 输入 一行一个正整数 n . 输出 一行一个实数,表示期望剩下的人数, ...
- 【loj6191】「美团 CodeM 复赛」配对游戏
题目 显然期望dp. 简单想法: f[i][j]表示前i个人中向右看并且没有被消除的人数的概率 如果第i+1个人是向右,$f[i+1][j+1]=f[i][j]/2$ 如果第i+1个人是向左,$f[i ...
- loj #6191. 「美团 CodeM 复赛」配对游戏 期望dp
题意:有一个栈,随机插入 $n$ 次 $0$/$1$ 如果栈顶是 $1$,然后插入 $0$,则将这两个元素都弹出,否则,插入栈顶. 求:$n$ 次操作后栈中期望的元素个数. 我们发现,按照上述弹栈方式 ...
- [LOJ 6213]「美团 CodeM 决赛」radar
[LOJ 6213]「美团 CodeM 决赛」radar 题意 给定 \(n\) 个横坐标 \(x_i\) , 为它们选择一个不超过 \(y_i\) 的纵坐标 \(h_i\), 产生 \(c_ih_i ...
随机推荐
- 分享知识-快乐自己:redis集群搭建
Redis介绍: 1.开源的NoSql数据库 2.C语言编写 3.基于内存运行,并且支持持久化 4.Key value存储 5.是主流的Nosql数据库之一 Redis优点: 1.内存使用方面,表现优 ...
- 分享知识-快乐自己:Caused by: org.hibernate.tool.schema.extract.spi.SchemaExtractionException: More than one table found in namespace (, ) : Dept (XXX)
在命名空间(,)中找到多个表 - SchemaExtractionException? 问题: 尝试在Java应用程序中使用Hibernate将一些值保存到表中时,我一直面临着这个奇怪的异常. 但是, ...
- jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
http://www.poluoluo.com/jzxy/201312/253059.html 在这个sprint中,因为要写前端UI,所以用到了jQuery,但是jQuery在向上遍历DOM树的AP ...
- java支付宝开发-00-资源帖
一.一些重要的官方文档 1.沙箱登录 2.沙箱环境使用说明 3.如何使用沙箱环境 4.当面付产品介绍 5.扫码支付接入指引 6.当面付快速接入 7.当面付接入必读 8.当面付进阶功能 9.当面付异步通 ...
- 几个常用的url生成二维码的接口
找到了几个URL生成的接口,速度上可能会有差别,可试验后选用,我用过第一个,分享: <!doctype html> <html lang="en"> < ...
- javaScript-进阶篇(一)
1.变量 1.必须以字母.下划线或美元符号开头,后面可以跟字母.下划线.美元符号和数字. 2.变量名区分大小写,如:A与a是两个不同变量. 3.不允许使用JavaScript关键字和保留字做变量名. ...
- 判断CPU是大端还是小端
#include "stdafx.h" #include <iostream> using namespace std; /* #大端模式(Big_endian):字数 ...
- java基础回顾之IO
Java的IO 是Java运用重要部分之一,涉及到的内容也比较多,容易混淆,一段时间不用,可能就会遗忘,要时常回顾记忆一下: (图片来源于网络) Java 流在处理上分为字符流和字节流. 字符流处理的 ...
- 【JVM】java方法区
java方法区[名词解析] --->和java堆一样,方法区是一块所有线程共享的内存区域. --->保存系统的类信息,比如,类的字段,方法,常量池等. ...
- 第一个 IronPython 的 ASP.NET 程序
今天试验了在 Visual Studio 中集成使用 IronPython,记录如下. 首先,下载一个 IronPython 1.0 的 binary,解压后,将目录路径 配置到环境变量 Path 中 ...