当前位置: 首页 > 编程日记 > 正文

SPOJ375(树链剖分)

题目:Query on a tree

题意:给定一棵树,告诉了每条边的权值,然后给出两种操作:

(1)把第i条边的权值改为val

(2)询问a,b路径上权值最大的边

分析:本题与HDU3966差不多,区别就是:HDU3966是告诉树中点权的值,这里是边权。

所以我们可以转化,用边的孩子节点来表示该边。

#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>using namespace std;
const int N=50010;
const int INF=1<<30;int n,tim;int num[N],siz[N],top[N],son[N];
int dep[N],tid[N],rank[N],fa[N];
int head[N],to[2*N],next[2*N],w[2*N],edge;struct Edge
{int u,v,c;
};
Edge tmp[2*N];void Init()
{memset(head,-1,sizeof(head));memset(son,-1,sizeof(son));tim=0;edge=0;
}void addedge(int u,int v,int c)
{to[edge]=v,w[edge]=c,next[edge]=head[u],head[u]=edge++;to[edge]=u,w[edge]=c,next[edge]=head[v],head[v]=edge++;
}//树链剖分部分
void dfs1(int u,int father,int d)
{dep[u]=d;fa[u]=father;siz[u]=1;for(int i=head[u]; ~i; i=next[i]){int v=to[i];if(v!=father){dfs1(v,u,d+1);siz[u]+=siz[v];if(son[u]==-1||siz[v]>siz[son[u]])son[u]=v;}}
}void dfs2(int u,int tp)
{top[u]=tp;tid[u]=++tim;rank[tid[u]]=u;if(son[u]==-1) return;dfs2(son[u],tp);for(int i=head[u]; ~i; i=next[i]){int v=to[i];if(v!=son[u]&&v!=fa[u])dfs2(v,v);}
}//线段树部分
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1int MAX[4*N];void PushUP(int rt)
{MAX[rt]=max(MAX[rt<<1],MAX[rt<<1|1]);
}void Build(int l,int r,int rt)
{if(l==r){MAX[rt]=num[l];return;}int mid=(l+r)>>1;Build(lson);Build(rson);PushUP(rt);
}void Update(int l,int r,int rt,int p,int val)
{if(l==r){MAX[rt]=val;return;}int mid=(l+r)>>1;if(p<=mid)Update(lson,p,val);elseUpdate(rson,p,val);PushUP(rt);
}int Query(int l,int r,int rt,int L,int R)
{if(L<=l&&R>=r)return MAX[rt];int mid=(l+r)>>1;int ret=-INF;if(L<=mid) ret=max(ret,Query(lson,L,R));if(R>mid)  ret=max(ret,Query(rson,L,R));return ret;
}void Change(int x,int val)
{if(dep[tmp[x].u]>dep[tmp[x].v])Update(2,n,1,tid[tmp[x].u],val);elseUpdate(2,n,1,tid[tmp[x].v],val);
}int query(int x,int y)
{int ans=-INF;while(top[x]!=top[y]){if(dep[top[x]]<dep[top[y]]) swap(x,y);ans=max(ans,Query(2,n,1,tid[top[x]],tid[x]));x=fa[top[x]];}if(dep[x]>dep[y]) swap(x,y);if(x!=y) ans=max(ans,Query(2,n,1,tid[x]+1,tid[y]));return ans;
}int main()
{char oper[15];int a,b,c,t;scanf("%d",&t);while(t--){Init();scanf("%d",&n);for(int i=1; i<n; i++){scanf("%d%d%d",&a,&b,&c);tmp[i].u=a;tmp[i].v=b;tmp[i].c=c;addedge(a,b,c);}dfs1(1,1,1);dfs2(1,1);//用边的孩子节点来表示该边for(int i=1;i<n;i++){if(dep[tmp[i].u]>dep[tmp[i].v])num[tid[tmp[i].u]]=tmp[i].c;elsenum[tid[tmp[i].v]]=tmp[i].c;}Build(2,n,1);while(1){scanf("%s",oper);if(oper[0]=='D') break;scanf("%d%d",&a,&b);if(oper[0]=='Q')printf("%d\n",query(a,b));elseChange(a,b);}}return 0;
}


转载于:https://www.cnblogs.com/pangblog/p/3294084.html

相关文章:

简单的python服务器程序

一个接受telnet输入的服务器端小程序 #!/usr/local/bin/python3.5 #coding:utf-8 import sockethost port 51423s socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) s.listen(1)print(S…

iOS:一句代码实现文本输入的限制

前言 实际开发中&#xff0c;往往需要处理UITextView、UITextField输入的限制。比如输入必须是价格格式&#xff08;一个小数点、小数点后面最多两位&#xff09;&#xff1b;输入最大长度限制&#xff1b;对输入内容的实时回调。处理这些的时候&#xff0c;我们通常需要做一些…

Linux操作系统(一:基本操作)

1、创建一个以自己姓名拼音简写一致的用户名&#xff08; useradd -d /home/abc abc&#xff09; 2、在linux中使用打印命令&#xff0c;在命令行中输入“当前用户名Hello world !” 3、显示现在天年月日&#xff0c;显示后一天的日期&#xff0c;显示上一月日期&#xff0c;显…

Core Text 学习笔记-基础

前言 最近在学习YYKit框架&#xff0c;看到关于CoreText相关的知识的时候感到非常吃力&#xff0c;于是乎就恶补了一下Core Text相关的基础知识。 Glyphs&#xff08;字形&#xff09; 字符的图形形式&#xff0c; 则是文字中字母 (character) 的视觉表现。&#xff08;字形&am…

虚拟机下CentOS 6.5配置IP地址的三种方法

实验软件环境&#xff1a;虚拟机Vmware Workstation10.0 、CentOS 6.5 32位 1、自动获取IP地址 虚拟机使用桥接模式&#xff0c;相当于连接到物理机的网络里&#xff0c;物理机网络有DHCP服务器自动分配IP地址。 dhclient 自动获取ip地址命令 ifconfig 查询系统里网卡信息&…

GIS 相关知识扫盲

1、什么是GIS GIS:地理信息系统&#xff0c;它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下&#xff0c;对整个或部分地球表层&#xff08;包括大气层&#xff09;空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。2…

Linux操作系统(二:shell脚本)

练习一&#xff1a;编写shell脚本&#xff0c;计算1-100的和&#xff1b; 练习二&#xff1a;将一目录下所有的文件的扩展名改为bak 练习三&#xff1a;写一个脚本&#xff0c;统计。/etc/ 目录下共有多少个目录文件 练习四&#xff1a;写一个脚本&#xff0c;依次向/etc/passw…

用OpenGLES实现yuv420p视频播放界面

背景 例子TFLive这个项目里&#xff0c;是我按着ijkPlayer写的直播播放器&#xff0c;要运行需要编译ffmpeg的库,网盘里存了一份, 提取码&#xff1a;vjce。OpenGL ES播放相关的在在OpenGLES的文件夹里。 learnOpenGL学到会使用纹理就可以了。 播放视频&#xff0c;就是把画面一…

C++类的静态成员详细讲解

在C中&#xff0c;静态成员是属于整个类的而不是某个对象&#xff0c;静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则&#xff0c;保证了安全性还可以节省内存。 静态成员的定义或声明要…

jenkins2 multibranch

通过multibranch类型的pipeline job使得对于多个branch的支持更加简单。只需要创建一个multibranch job&#xff0c;jenkins将自动地为所有的branch创建job。 文章来自&#xff1a;http://www.ciandcd.com文中的代码来自可以从github下载&#xff1a; https://github.com/ciand…

Nagios的安装和基本配置(一:知识点总结及环境准备)

实验目的及要求 掌握Nagios监控的基本使用&#xff1b;掌握Nagios监控服务的搭建和配置&#xff1b; 实验环境&#xff1a; 1、满足实验要求的PC端&#xff1b; Host-name OS IP sofaware Nagios-server Centos7 192.168.1.119 Apache,php,Nagios,Nagios-plguins Nag…

浅谈Android四大组件之Service

一&#xff1a;Service简介 Android开发中&#xff0c;当需要创建在后台运行的程序的时候&#xff0c;就要使用到Service。 1:Service&#xff08;服务&#xff09;是一个没有用户界面的在后台运行执行耗时操作的应用组件。其他应用组件能够启动Service&#xff0c;并且当用户切…

使用 fastlane 实现 iOS 持续集成(二)

本文接上篇文章主要说下怎样使用 fastlane 上传到fir和蒲公英&#xff0c;下面先介绍下 plugin 命令。 plugin命令介绍: 列出所有可用插件 fastlane search_plugins 搜索指定名称的插件: fastlane search_plugins [query] 添加插件: fastlane add_plugin [name] 安装插件: fast…

Nagios的安装和基本配置(二:Nagios-Server的安装)

任务二、Nagios-server的安装 2.1、创建Nagios用户和组 注&#xff1a; #useradd Nagios -s /bin/nologin #groundadd nagcmd #usermod -a -G nagcmd Nagios #usermod -a G nagcmd apache 2.2、安装Nagios 2.2.1、上传软件包至操作系统中&#xff1b; 2.2.2、解压软件并…

shell编程-正则表达式

1.正则表达式是什么 它主要用于字符串的模式分割&#xff0c;匹配&#xff0c;查找及替换操作。 2、正则表达式与通配符 正则表达式用来在文件中匹配符合条件的字符串&#xff0c;正则包含匹配。grep,awk,sed等命令可以支持正则表达式。 通配符用来匹配符合条件的文件名&#x…

使用 CocoaPods 给微信集成 SDK 打印收发消息

推荐序 本文介绍的是一套逆向工具&#xff0c;可以在非越狱手机上给任意应用增加插件。在文末的示例中&#xff0c;作者拿微信举例&#xff0c;展示出在微信中打印收发消息的功能。 这套工具可以加快逆向开发的速度&#xff0c;其重签名思想也可以用于二次分发别人的应用。 其实…

数据库之子查询四(多重,表复制)

一、多重子查询 select teaID,teaName,age,sex,dept,professionfrom tteacherwhere dept(select dept from teaIDt103265)and profession(select professionfrom tteacherwhere teaIDt103265)这里的子查询就是为了从表中提取出有效信息参与外部查询二、create table 语句中子查…

Nagios的安装和基本配置(三:Nagios-Client的安装)

任务三、Nagios-Client的安装 3.1、关闭防火墙和selinux 注&#xff1a; #systemctl stop firewalld.service #systemctl disable firewalld.service #vi /etc/selinux/config 3.2、配置环境 #yum install gcc glibc-common -y #yum install gd gd-devel openssl openssl…

事件(待完成)

内容窗口 事件绑定​ 给整个浏览器 内容窗口区的事件绑定。 ​通过 document.documentElement或者document.body&#xff1f;似乎都可以。但最好是直接通过document document.addEventListener(mousemove,function () { });// 整个浏览器内容范围都将触发。拖动实现必用​ 转载…

iOS 模仿支付宝支付到账推送,播报钱数

最近申请了支付宝的二维码收钱码&#xff0c;其中支付宝有这么一个功能&#xff0c;就是&#xff0c;别人扫描你的二维码给你转账之后&#xff0c;收到钱会有一条语音推送&#xff0c;”支付宝到账 1000万“之类的推送消息&#xff0c;不管你的支付宝app有没有被杀死。 只要你的…

hdu - 4707 - Pet

题意&#xff1a;一棵N个结点(编号从0开始)的树&#xff0c;根结点为0&#xff0c;求到根结点的距离大于D的结点个数&#xff08;0 < 测试组数T < 10, 0<N<100000, 0<D<N&#xff09;。 题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4707…

Nagios的安装和基本配置(四:调试验证 错误总结)

任务四、调试验证 4.1、验证连通性 在/usr/local/Nagios/etc/nrpe.cfg文件中server的ip地址 #vi /usr/local/Nagios/etc/nrpe.cfg #重启nrpe #pkill nrpe #netstat -Intp #/usr/local/Nagios/bin/nrpe -d -c /usr/local/Nagios/etc/nrpe.cfg #在server主机做验证 #cd /…

hitTest和pointInside方法

hittest方法 就是用来寻找最合适的view当一个事件传递给一个控件&#xff0c;就会调用这个控件的hitTest方法点击了白色的view&#xff1a; 触摸事件 -> UIApplication -> UIWindow 调用 [UIWindow hitTest] -> 白色view [WhteView hitTest] 实验1: 定义 BaseView&…

Github上的PHP资源汇总大全

依赖管理 ——用于依赖管理的包和框架 Composer/Packagist : 一个包和依赖管理器 Composer Installers: 一个多框架Composer库安装器 Pickle: 可以在任意平台上安装PHP扩展包 依赖管理的附加部分 ——其它依赖管理的相关工具 Satis : 静态的Composer库生成器 Composition: 一个…

UIButton长按事件

添加长按事件1 - (void)viewDidLoad2 {3 [super viewDidLoad];4 //Do any additional setup after loading the view, typically from a nib.5 6 UIButton *aBtn[UIButton buttonWithType:UIButtonTypeRoundedRect];7 [aBtn setFrame:CGRectMake(0, 10, 60, 60…

Hadoop集群搭建(一:集群安装及网络环境配置)

实验目的及要求 完成VMware workstations安装&#xff0c;会应用相关操作&#xff1b;完成虚拟机中Linux CentOS 7操作系统安装&#xff1b;完成静态网络地址的配置&#xff0c;所有主机的网络能够正常使用&#xff0c;相互之间能够正常连接&#xff1b;完成主机名配置&#x…

QQ音乐API分析记录

我一直是QQ音乐的用户&#xff0c;最近想做一个应用&#xff0c;想用QQ音乐的API&#xff0c;搜索了很久无果&#xff0c;于是就自己分析QQ音乐的API。 前不久发现QQ音乐出了网页版的&#xff0c;是Flash的&#xff0c;但是&#xff0c;我用iPhone打开这个链接的时候&#xff0…

Vision 圖像識別框架的使用

阅读 137收藏 102017-10-18原文链接&#xff1a;www.itread01.comGoogle无人车之父、MIT/斯坦福/耶鲁专家带你进入无人驾驶之域 http://cn.udacity.com/course/intro-to-self-driving-cars--nd113 本文為CocoaChina網友 品位生活 投稿 北京時間2017.6.6日淩晨1點&#xff0c;新…

Jmeter性能测试 入门

Jmeter性能测试 入门 原文:Jmeter性能测试 入门Jmeter是一款优秀的开源测试工具&#xff0c; 是每个资深测试工程师&#xff0c;必须掌握的测试工具&#xff0c;熟练使用Jmeter能大大提高工作效率。 熟练使用Jmeter后&#xff0c; 能用Jmeter搞定的事情&#xff0c;你就不会使用…

Hadoop集群搭建(二:集群主机间免密登录配置)

实验目的及要求&#xff1a; 静态网络地址配置&#xff1b;主机名的配置&#xff1b;防火墙的配置&#xff0c;使平台相关软件的常用端口能够远程正常访问&#xff1b;主机地址映射的配置&#xff0c;使所有主机能够通过主机名相互正常访问&#xff1b;免密码登录的配置&#…