【BZOJ】2157: 旅游

时间:2022-08-28 11:54:08

http://www.lydsy.com/JudgeOnline/problem.php?id=2157

题解:裸lct不解释..

#include <bits/stdc++.h>
using namespace std;
struct node *null;
struct node {
node *c[2], *f;
bool flag, rev, tag; int k, sum, mx, mn;
bool d() { return f->c[1]==this; }
void setc(node *x, bool d) { c[d]=x; x->f=this; }
bool check() { return f->c[0]==this || f->c[1]==this; }
void upd() {
if(this==null) return;
tag=!tag; sum=-sum; k=-k;
swap(mx, mn); mx=-mx; mn=-mn;
}
void upd1() {
if(this==null) return;
rev=!rev; swap(c[0], c[1]);
}
void pushup() {
sum=c[0]->sum+c[1]->sum+k*flag;
mx=max(c[0]->mx, c[1]->mx); if(flag) mx=max(mx, k);
mn=min(c[0]->mn, c[1]->mn); if(flag) mn=min(mn, k);
}
void pushdown() {
if(tag) c[0]->upd(), c[1]->upd(), tag=0;
if(rev) c[0]->upd1(), c[1]->upd1(), rev=0;
}
}T[2000005], *it=T;
node *newnode(int k, bool flag) {
node *x=it++;
x->c[0]=x->c[1]=x->f=null; x->k=x->sum=k;
x->tag=x->rev=0; x->flag=flag;
if(flag) x->mx=x->mn=k;
else x->mx=-1005, x->mn=1005;
return x;
}
void rot(node *x) {
node *f=x->f;
f->pushdown(); x->pushdown(); bool d=x->d();
if(f->check()) f->f->setc(x, f->d());
else x->f=f->f;
f->setc(x->c[!d], d);
x->setc(f, !d);
f->pushup();
}
void fix(node *x) { if(x->check()) fix(x->f); x->pushdown(); }
void splay(node *x) {
fix(x);
while(x->check())
if(!x->f->check()) rot(x);
else x->d()==x->f->d()?(rot(x->f), rot(x)):(rot(x), rot(x));
x->pushup();
}
node *access(node *x) {
node *y=null;
for(; x!=null; y=x, x=x->f) splay(x), x->c[1]=y;
return y;
}
void mkroot(node *x) { access(x)->upd1(); splay(x); }
void split(node *x, node *y) { mkroot(x); access(y); splay(y); }
void link(node *x, node *y) { mkroot(x); x->f=y; } void init() {
null=it++;
null->c[0]=null->c[1]=null->f=null;
null->k=null->sum=0;
null->rev=null->flag=null->tag=0;
null->mx=-1005; null->mn=1005;
} void change(node *x, int k) {
splay(x);
x->k=k;
x->pushup();
}
void update(node *x, node *y) {
split(x, y);
y->upd();
}
void getsum(node *x, node *y) {
split(x, y); printf("%d\n", y->sum);
}
void getmx(node *x, node *y) {
split(x, y); printf("%d\n", y->mx);
}
void getmn(node *x, node *y) {
split(x, y); printf("%d\n", y->mn);
}
node *nd[200005], *ed[200005];
int main() {
init();
int n, q;
scanf("%d", &n);
for(int i=0; i<n; ++i) nd[i]=newnode(0, 0);
for(int i=1; i<n; ++i) {
int x, y, k; scanf("%d%d%d", &x, &y, &k);
ed[i]=newnode(k, 1);
link(nd[x], ed[i]); link(ed[i], nd[y]);
}
scanf("%d", &q); char s[5];
while(q--) {
int x, y;
scanf("%s%d%d", s, &x, &y);
if(s[0]=='C') change(ed[x], y);
else if(s[0]=='N') update(nd[x], nd[y]);
else if(s[0]=='S') getsum(nd[x], nd[y]);
else {
if(s[1]=='A') getmx(nd[x], nd[y]);
else getmn(nd[x], nd[y]);
}
}
return 0;
}

  


lct倒是半小时1次码好无错误 = =可是坑爹的题 :编号从0~n-1。。。坑了我好久啊= =

当练手速= =

【BZOJ】2157: 旅游的更多相关文章

  1. BZOJ 2157&colon; 旅游&lpar; 树链剖分 &rpar;

    树链剖分.. 样例太大了根本没法调...顺便把数据生成器放上来 -------------------------------------------------------------------- ...

  2. bzoj 2157&colon; 旅游 &lpar;LCT 边权&rpar;

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2157 题面; 2157: 旅游 Time Limit: 10 Sec  Memory Lim ...

  3. BZOJ 2157&colon; 旅游

    2157: 旅游 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1347  Solved: 619[Submit][Status][Discuss] ...

  4. 【刷题】BZOJ 2157 旅游

    Description Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间 ...

  5. BZOJ 2157 旅游(动态树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2157 [题目大意] 支持修改边,链上查询最大值最小值总和,以及链上求相反数 [题解] ...

  6. BZOJ 2157 旅游(树链剖分&plus;线段树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2157 [题目大意] 支持修改边,链上查询最大值最小值总和,以及链上求相反数 [题解] ...

  7. BZOJ 2157&colon; 旅游 &lpar;2017&period;7&period;21 6&colon;30-2017&period;7&period;21 15&colon;38 今日第一题。。&rpar;

    Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1754  Solved: 765 Description Ray 乐忠于旅游,这次他来到了T 城.T ...

  8. bzoj 2157&colon; 旅游【树链剖分&plus;线段树】

    裸的树链剖分+线段树 但是要注意一个地方--我WA了好几次才发现取完相反数之后max值和min值是要交换的-- #include<iostream> #include<cstdio& ...

  9. BZOJ 2157&colon; 旅游 &lpar;树链剖分&plus;线段树&rpar;

    树链剖分后线段树维护区间最大最小值与和. 支持单点修改与区间取反. 直接写个区间取反标记就行了.线段树板题.(200行6000B+ 1A警告) #include <cstdio> #inc ...

  10. BZOJ 2157&colon; 旅游 (结构体存变量&rpar;

    用结构体存变量好像确实能提高运行速度,以后就这么写数据结构了 Code: #include <cstdio> #include <algorithm> #include &lt ...

随机推荐

  1. Java基础知识(贰)

    一.面向对象 Java中的面向对象与C#的面向对象,本质都是一样.所以对于学过C#的同学理解Java中面向对象的概念就比较轻松. 对象 定义: 万物皆对象,客观存在的事物都称为对象. 1.面向对象 类 ...

  2. 可能是史上最强大的js图表库——ECharts带你入门

    PS:之前的那篇博客Highcharts——让你的网页上图表画的飞起 ,评论中,花儿笑弯了腰 和 StanZhai 两位仁兄让我试试 ECharts ,去主页看到<Why ECharts ?&g ...

  3. Java 性能优化实战记录&lpar;2&rpar;---句柄泄漏和监控

    前言: Java不存在内存泄漏, 但存在过期引用以及资源泄漏. (个人看法, 请大牛指正) 这边对文件句柄泄漏的场景进行下模拟, 并对此做下简单的分析.如下代码为模拟一个服务进程, 忽略了句柄关闭, ...

  4. delphi调用webservice 转

      如今 Web Service 已越来越火了,在DotNet已开发的Web Service中,Delphi 7如何方便的调用DotNet写的Web Service呢?方法有两种,一种是在Delphi ...

  5. SQL查询语句联系

    建立四个表,分别是学生表,课程表,成绩表和教师信息表 插入信息: 题目: 1. 查询Student表中的所有记录的Sname.Ssex和Class列 select Sname,Ssex,Class f ...

  6. SimplePath 使用心得

    上图是 用SimplePath 做的 寻路,其中 三个 绿点 是 移动的 目标点,三个红点 是 角色移动,蓝色方块是阻挡物体. 这三个角色 移动 有三种 方式,1 随机移动2 按照 绿色小球点 移动  ...

  7. 201521123017 《Java程序设计》第8周学习总结

    1. 本周学习总结 2. 书面作业 Q1.List中指定元素的删除(题目4-1) 1.1 实验总结 for (int i = list.size()-1; i >=0; i--) {//从最后一 ...

  8. New UWP Community Toolkit - RadialGauge

    概述 New UWP Community Toolkit  V2.2.0 的版本发布日志中提到了 RadialGauge 的调整,本篇我们结合代码详细讲解  RadialGauge 的实现. Radi ...

  9. 使用Onenote &amp&semi; Evernote &amp&semi; VSC&plus;Markdown构建个人笔记系统

    Onenote & Evernote & VSC+Markdown构建个人笔记系统 umeowbing(转载请注明出处) 1 Why 笔记本太多,全部带着太重,查找起来也很麻烦-- 笔 ...

  10. 一起学Android之Dialog

    概述 对话框(Dialog)是一个小窗口,在Android系统开发中经常会用到,它提示用户做决定或者输入一些东西,对话框并不填充屏幕,是一个模态(Modal)窗口.Dialog类是所有对话框的基类,应 ...