SPOJ QTREE5 lct

题目链接
对于每一个节点,记录这个节点所在链的信息:
ls:(链的上端点)距离链内部近期的白点距离
rs:(链的下端点)距离链内部近期的白点距离
注意以上都是实边
虚边的信息用一个set维护。
set维护的是对于每一个不是链上,可是this的子树,那些子树中距离this近期的白点距离。

#include <stdio.h>
#include <string.h>
#include <set>
#include <algorithm>
#include <iostream>
#include <vector>
template <class T>
inline bool rd(T &ret) {char c; int sgn;if (c = getchar(), c == EOF) return 0;while (c != '-' && (c<'0' || c>'9')) c = getchar();sgn = (c == '-') ?

-1 : 1; ret = (c == '-') ? 0 : (c - '0'); while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0'); ret *= sgn; return 1; } template <class T> inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if (x>9) pt(x / 10); putchar(x % 10 + '0'); } using namespace std; typedef long long ll; const int inf = 1e9; const int N = 1e5 + 10; struct Node *null; struct Node{ multiset<int>chain; Node *fa, *ch[2]; int size; int col, ls, rs, id, len, edge; //黑色col=-inf, 白色col=0 len是链长 bool rev; inline void put(){ printf("%d son:%d,%d fa:%d len:%d (%d,%d) col:%d\n", id, ch[0]->id, ch[1]->id, fa->id, len, ls, rs, col); for (auto i : chain)printf("%d ", i); puts(""); } inline void clear(int _id){ fa = ch[0] = ch[1] = null; size = 1; rev = 0; len = edge = 0; id = _id; chain.clear(); chain.insert(inf); col = inf; ls = rs = inf; } inline void push_up(){ size = 1 + ch[0]->size + ch[1]->size; len = edge + ch[0]->len + ch[1]->len; int m0 = min(col, *chain.begin()), ml = min(m0, ch[0]->rs + edge), mr = min(m0, ch[1]->ls); ls = min(ch[0]->ls, ch[0]->len + edge + mr); rs = min(ch[1]->rs, ch[1]->len + ml); } inline void push_down(){ if (rev){ ch[0]->flip(); ch[1]->flip(); rev = 0; } } inline void setc(Node *p, int d){ ch[d] = p; p->fa = this; } inline bool d(){ return fa->ch[1] == this; } inline bool isroot(){ return fa == null || fa->ch[0] != this && fa->ch[1] != this; } inline void flip(){ if (this == null)return; swap(ch[0], ch[1]); rev ^= 1; } inline void go(){//从链头開始更新到this if (!isroot())fa->go(); push_down(); } inline void rot(){ Node *f = fa, *ff = fa->fa; int c = d(), cc = fa->d(); f->setc(ch[!c], c); this->setc(f, !c); if (ff->ch[cc] == f)ff->setc(this, cc); else this->fa = ff; f->push_up(); } inline Node*splay(){ go(); while (!isroot()){ if (!fa->isroot()) d() == fa->d() ? fa->rot() : rot(); rot(); } push_up(); return this; } void debug(Node *x){ if (x == null)return; x->put(); debug(x->ch[0]); debug(x->ch[1]); } inline Node* access(){//access后this就是到根的一条splay,而且this已经是这个splay的根了 for (Node *p = this, *q = null; p != null; q = p, p = p->fa){ p->splay(); // debug(q); puts(""); debug(p); puts(""); if (p->ch[1] != null) p->chain.insert(p->ch[1]->ls); if (q != null) p->chain.erase(p->chain.find( q->ls )); p->setc(q, 1); p->push_up(); // debug(q); puts(""); debug(p); puts(""); } return splay(); } inline Node* find_root(){ Node *x; for (x = access(); x->push_down(), x->ch[0] != null; x = x->ch[0]); return x; } void make_root(){ access()->flip(); } void cut(){//把这个点的子树脱离出去 access(); ch[0]->fa = null; ch[0] = null; push_up(); } void cut(Node *x){ if (this == x || find_root() != x->find_root())return; else { x->make_root(); cut(); } } void link(Node *x){ if (find_root() == x->find_root())return; else { make_root(); fa = x; } } }; Node pool[N], *tail; Node *node[N]; vector<int>G[N]; void dfs(int u, int fa){ for (int v : G[u]){ if (v == fa)continue; node[v]->fa = node[u]; node[v]->edge = 1; dfs(v, u); node[u]->chain.insert(node[v]->ls); } node[u]->push_up(); } int n, q; void debug(Node *x){ if (x == null)return; x->put(); debug(x->ch[0]); debug(x->ch[1]); } int main(){ while (cin >> n){ tail = pool; null = tail++; null->clear(0); null->size = 0; for (int i = 1; i <= n; i++) { G[i].clear(); node[i] = tail++; node[i]->clear(i); } for (int i = 1, u, v; i < n; i++){ rd(u); rd(v); G[u].push_back(v); G[v].push_back(u); } dfs(1, 1); // for (int i = 1; i <= n; i++)debug(node[i]), puts(""); rd(q); while (q--){ int u, v; rd(u); rd(v); if (u == 0) { node[v]->access(); if (node[v]->col == inf)node[v]->col = 0; else node[v]->col = inf; node[v]->push_up(); } else { node[v]->access(); int ans = min(*node[v]->chain.begin(), node[v]->rs); if (ans == inf)ans = -1; pt(ans); puts(""); } // for (int i = 1; i <= n; i++)debug(node[i]), puts(""); } } return 0; }

转载于:https://www.cnblogs.com/lxjshuju/p/7388973.html

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

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

相关文章

Java EE 8 MVC:使用路径参数

在上一篇文章中&#xff0c;我们看到了如何在Java EE MVC中使用查询参数 。 这篇文章继续与一个非常相似的主题&#xff1a;路径参数。 路径参数是请求路径的动态部分&#xff0c;可以使用Path注释指定。 例如&#xff1a; Controller Path("path-params") public…

duilib入门简明教程 -- 部分bug (11) (转)

原文转自&#xff1a;http://www.cnblogs.com/Alberl/p/3344886.html 一、WindowImplBase的bug在第8个教程【2013 duilib入门简明教程 -- 完整的自绘标题栏(8)】中&#xff0c;可以发现窗口最大化之后有两个问题&#xff0c;1、最大化按钮的样式还是没变&#xff0c;正确的样式…

在考生文件夹存有JAVA3_注意:下面出现的“考生文件夹”均为%USER%在考生文件夹下存有文件名为J_网考网(Netkao.com)...

【分析解答题】注意&#xff1a;下面出现的“考生文件夹”均为%USER%在考生文件夹下存有文件名为Java_2.java文件&#xff0c;本题功能是完成点定义&#xff0c;并输出点坐标。请完善Java_2.java文件&#xff0e;并进行调试&#xff0c;使程序结果如下&#xff1a;x5 y5点的坐标…

jasperreports_JasperReports JSF插件用例系列

jasperreports这是文章系列的切入点&#xff0c;在该系列文章中&#xff0c;我将尝试介绍JasperReport JSF插件的一些用例&#xff0c;该工具的创建是为了轻松地将为JasperReports设计的业务报告集成到JSF应用程序中。 该系列中描述的所有示例都可以从JasperReports JSF插件网站…

RN 47 中的 JS 线程及 RunLoop

RCBridge 初始化时声明了一个 CADisplayLink _jsDisplayLink [CADisplayLink displayLinkWithTarget:self selector:selector(_jsThreadUpdate:)];在 _jsThreadUpdate 函数中&#xff0c;处理界面更新。这个 CADisplayLink 随后被加到 JS 线程对应的 RunLoop 中。 - (void)ad…

java nginx https_docker nginx 配置ssl,实现https

docker nginx 配置ssl&#xff0c;实现https2019-09-05 16:06:35.0nginx配置https总览在nginx配置ssl实现https&#xff0c;简单来说分为三个步骤&#xff1a;1 上传ssl证书等文件将 1_www.domain.com_bundle.crt 和 2_www.domain.com.key 上传到nginx配置文件的目录旁边。这两…

Java EE 8 MVC:使用表单参数

在前两篇文章中&#xff0c;我们了解了如何在即将到来的Java EE MVC框架中使用查询和路径参数 。 这篇文章重点介绍表单参数。 当您使用发布请求提交Web表单时&#xff0c;表单值将作为请求正文的一部分发送。 媒体类型&#xff08;或内容类型&#xff09;定义了用于在请求正文…

Elasticsearch索引自动删除

简介 脚本分2部分&#xff0c;1部分查找符合条件的索引名&#xff0c;2脚本调用1脚本&#xff0c;进行删除操作 脚本 查找符合条件的&#xff0c;默认大于30天 # coding:utf-8__author__ Jipu FANGfrom elasticsearch import Elasticsearch import re import time import dat…

JavaScript入门几个概念

JavaScript入门几个概念 刚刚入门JavaScript的时候&#xff0c;搞懂DOM、BOM以及它们的对象document和window很有必要。 DOM是为了操作文档出现的API&#xff0c;document是它的一个对象。BOM是为了操作浏览器出现的API&#xff0c;window是它的一个对象。DOM When a web page …

idea中使用osgi_OSGi环境中的Servlet基本身份验证

idea中使用osgi您首先需要获得对OSGI HTTP Service的引用。 您可以通过声明性服务来做到这一点。 这篇文章将集中在获得对HTTP服务的引用之后的步骤。 注意&#xff1a;此职位的完整课程位于此处 通过OSGI HTTP Service注册Servlet时&#xff0c;它为您提供了提供HTTPContext实…

java spring aop 注解包_Spring AOP 注解配置实例

Spring AOP注解例子一&#xff1a;导入相关jar包。首先导入Spring的相关包(这里就不多说了&#xff0c;我这里是3.2.4版本的)然后导入AOP注解的相关包(不是spring的包)aspectjrt-1.6.7.jar和aspectjweaver-1.6.8.jar和aopalliance.jar(注意这里最好是1.6.7以上的版本&#xff0…

email

163邮件发送 private void SendEmail(string content){SmtpClient mSmtpClient new SmtpClient();mSmtpClient.Host "smtp.163.com";mSmtpClient.Port 25;mSmtpClient.UseDefaultCredentials true;mSmtpClient.EnableSsl false;var mSenderUsername "abc&q…

java web 有哪些标签库_java web中jsp常用标签

在jsp页面开发过程中&#xff0c;经常需要使用JSTL(Java Server Pages Standard Tag Library)标签开开发页面&#xff0c;是看起来更加的规整舒服。JSTL主要提供了5大类标签库:1. 核心标签库: 为日常任务提供通用支持,如显示和设置变量,重复使用一组项目,测试条件以及其他操作(…

微服务有麻烦吗? Lagom在这里为您提供帮助。 尝试一下!

蛋糕支持。 我们很自豪地宣布&#xff0c;新的Apache许可的微服务框架Lagom可在GitHub上使用 &#xff01; 当其他框架专注于打包和实例启动时&#xff0c;Lagom重新定义了Java开发人员构建基于微服务的应用程序的方式。 服务是异步的。 服务内通信由您管理。 流是开箱即用的。…

vue element-ui IE9--11报 “无法获取未定义或null引用的属性‘toLowerCase’”

今天做zymh比赛的一个管理后台&#xff0c;用的技术是vueelement-uivue-routeraxios&#xff0c;其他浏览器运行的很好&#xff0c;但是在IE&#xff08;从IE11到IE9&#xff0c;vue支持IE9以上&#xff09;都报错 点进去就是定位到了markUp这个函数&#xff0c;经查询是elemen…

执行力

什么是执行力&#xff1f; 员工执行力就是员工能够按质按量、一丝不苟地做好上级交待的工作&#xff0c;衡量的基本标准是提供了上级&#xff08;客户或公司&#xff09;满意的结果。 那种不能创造价值&#xff0c;不能提供结果的&#xff0c;不是真正的执行力&#xff0c;只是…

接口中的默认方法和静态方法

在我们最初的Java 8支持公告中&#xff0c;我们特别提到了缺少流&#xff0c;但是完全错过了默认/静态本机接口不起作用的事实。 现在&#xff0c;由于有一个警惕的社区成员指出了这一问题&#xff0c;因此此问题已得到解决。 由于限制需要全新构建才能使它们正常工作&#xf…

海思芯片硬件java加速_海思芯片直播延迟测试结果(小于100毫秒)

背景最近接触了许多客户&#xff0c;许多是做安全方面产品的客户&#xff0c;有些还涉及到jun队后勤的等等&#xff0c;他们普遍对采集延迟&#xff0c;编码延迟&#xff0c;传输延迟等都有很大关注。例如有个客户是做反狙击探测的&#xff0c;那可是与生命相关的&#xff0c;容…

for 循环练习题

X3 * 6528 3X * 8256X为一个数字 填入一个数字 使等式成立 for (var x1;x<9&&x>0;x) { if ((x*103)*6528(3*10x)*8256) { break; } }document.write(x); 第二题&#xff1a;在页面上输出以下图形 * *** ***** ******* ********* 第一种&#xff1a; …

java jsp登录的验证码_Java Web实现登录验证码(Servlet+jsp)

1.生成验证码图片(Servlet)importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics2D;importjava.awt.image.BufferedImage;importjava.io.IOException;importjava.util.Random;importjavax.imageio.ImageIO;importjavax.servlet.ServletException;importjavax.ser…