【BZOJ2157】旅游 LCT
模板T,SB的DMoon。。其实样例也是中国好样例。。。一开始不会复制,yangyang:找到“sample input”按住shift,按page down。。。。
#include <iostream> #include <cstdio> #define inf 0x7fffffff #define N 20010 #define M 20010 using namespace std; int n,m; struct node *null; struct node { node *fa,*ch[]; //node(int x,int flag); int maxn,minn,data,sum; bool rev,rev_data,ie; ];} ] && ];} void setc(node *x,int t) {this->ch[t]=x; x->fa=this;} void push_up(); void push_down(); }pool[N+M],*pt=pool,*e[M],*p[N]; void node::push_up() { if (this==null) return; sum=ch[]->sum+ch[]->sum+data*ie; maxn=max(ch[]->maxn,ch[]->maxn); if (ie) maxn=max(maxn,data); minn=min(ch[]->minn,ch[]->minn); if (ie) minn=min(minn,data); } void node::push_down() { if (this==null) return; if (!isrt()) fa->push_down(); if (rev) { ]!=]->rev^=; ]!=]->rev^=; swap(ch[],ch[]); rev=; } if (rev_data) { ]!=null) { ]->maxn; ch[]->rev_data^=; ch[]->data=-ch[]->data; ch[]->sum=-ch[]->sum; ch[]->maxn=-ch[]->minn; ch[]->minn=-k; } ]!=null) { ]->maxn; ch[]->rev_data^=; ch[]->sum=-ch[]->sum; ch[]->maxn=-ch[]->minn; ch[]->minn=-k; ch[]->data=-ch[]->data; } // swap(ch[0],ch[1]);// 注意!!! rev_data=; } } namespace LCT { node *NewNode(int x,int flag) { node *r=pt++; r->fa=r->ch[]=r->ch[]=null; r->data=r->sum=x; r->ie=flag; if (flag) r->maxn=r->minn=x; else r->maxn=-inf,r->minn=inf; r->rev=r->rev_data=; return r; } void rotate(node *x) { node *r=x->fa; if (r==null || x==null) return; x->push_down(); r->push_down(); bool t=x->chr(); if (r->isrt()) x->fa=r->fa; // !!!在这里坑了好几次了 else r->fa->setc(x,r->chr()); r->setc(x->ch[t^],t); x->setc(r,!t); r->push_up(); x->push_up(); } void Splay(node *x) { //if (x==null) return; x->push_down(); for (;!x->isrt();rotate(x)) if (!x->fa->isrt()) if (x->chr()==x->fa->chr()) rotate(x->fa); else rotate(x); x->push_up(); } void Access(node *x) { node *r=null; for (;x!=null;r=x,x=x->fa) { Splay(x); x->ch[]=r; } } ;} void Split(node *x,node *y) {MoveRoot(x); Access(y); Splay(y);} void Link(node *x,node *y) {MoveRoot(x); x->fa=y;} ]->fa=]=null;} void Change(node *x,int v) {Splay(x); x->data=v; x->push_up();} ; } int Query_Sum(node *x,node *y) {Split(x,y); return y->sum;} int Query_Max(node *x,node *y) {Split(x,y); return y->maxn;} int Query_Min(node *x,node *y) {Split(x,y); return y->minn;} } inline int read() { char c; ,f=; ;} ans=c-'; +c-'; return ans*f; } void init() { null=pt++; ]=]=null; ; ; null->maxn=-inf; null->minn=inf; } using namespace LCT; int main() { // freopen("travel.in","r",stdin); // freopen("travel.out","w",stdout); int x,y,z; n=read(); init(); ;i<n;i++) p[i]=NewNode(,); ;i<n;i++) { x=read(); y=read(); z=read(); e[i]=NewNode(z,); Link(p[x],e[i]);Link(e[i],p[y]); } m=read(); ]; ;i<=m;i++) { scanf("%s",s); x=read(); y=read(); ]=='C') Change(e[x],y); ]=='N') Data_Rev(p[x],p[y]); ]=='S') printf("%d\n",Query_Sum(p[x],p[y])); ]=='M') ]=='A') printf("%d\n",Query_Max(p[x],p[y])); else printf("%d\n",Query_Min(p[x],p[y])); } ; }
Description
Ray 乐忠于旅游,这次他来到了T 城。T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接。为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路径。换句话说, T 城中只有N − 1 座桥。Ray 发现,有些桥上可以看到美丽的景色,让人心情愉悦,但有些桥狭窄泥泞,令人烦躁。于是,他给每座桥定义一个愉悦度w,也就是说,Ray 经过这座桥会增加w 的愉悦度,这或许是正的也可能是负的。有时,Ray 看待同一座桥的心情也会发生改变。现在,Ray 想让你帮他计算从u 景点到v 景点能获得的总愉悦度。有时,他还想知道某段路上最美丽的桥所提供的最大愉悦度,或是某段路上最糟糕的一座桥提供的最低愉悦度。
Input
输入的第一行包含一个整数N,表示T 城中的景点个数。景点编号为 0...N − 1。接下来N − 1 行,每行三个整数u、v 和w,表示有一条u 到v,使 Ray 愉悦度增加w 的桥。桥的编号为1...N − 1。|w| <= 1000。输入的第N + 1 行包含一个整数M,表示Ray 的操作数目。接下来有M 行,每行描述了一个操作,操作有如下五种形式: C i w,表示Ray 对于经过第i 座桥的愉悦度变成了w。 N u v,表示Ray 对于经过景点u 到v 的路径上的每一座桥的愉悦度都变成原来的相反数。 SUM u v,表示询问从景点u 到v 所获得的总愉悦度。 MAX u v,表示询问从景点u 到v 的路径上的所有桥中某一座桥所提供的最大愉悦度。 MIN u v,表示询问从景点u 到v 的路径上的所有桥中某一座桥所提供的最小愉悦度。测试数据保证,任意时刻,Ray 对于经过每一座桥的愉悦度的绝对值小于等于1000。
Output
对于每一个询问(操作S、MAX 和MIN),输出答案。
Sample Input
Sample Output
【BZOJ2157】旅游 LCT的更多相关文章
- [bzoj2157]旅游 (lct)
这个应该也算裸的模板题吧..主要是边权的问题,对于每条边u->v,我们可以新建一个节点代替他,把边的信息弄到新的点上,就变成u->x->v了... 当然了这样的话要防止u和v这些没用 ...
- BZOJ2157: 旅游
传送门 先讲一个悲伤地故事 RunID User Problem Result Memory Time Language Code_Length Submit_Time 1635823 Cydiate ...
- 【BZOJ2157】旅游(树链剖分,Link-Cut Tree)
[BZOJ2157]旅游(树链剖分,Link-Cut Tree) 题面 Description Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥 ...
- 旅游公司招聘Java工程师
公司招聘:岗位要求如下 Java开发工程师工作内容1.根据需求完成软件系统代码的开发,测试以及文档撰写工作:2.分析并解决客户的问题:3.配合业务部门进行数据分析以及系统优化 岗位要求:1.本科以上学 ...
- 一堆LCT板子
搞了一上午LCT,真是累死了-- 以前总觉得LCT高大上不好学不好打,今天打了几遍感觉还可以嘛= =反正现在的水平应付不太难的LCT题也够用了,就这样好了,接下来专心搞网络流. 话说以前一直YY不出来 ...
- 基于GIS的旅游辐射区人口统计
在旅游规划中,考虑旅游景点周边的人口负载量是很重要的一个方面,这将直接影响资源的投入和配置,开发潜力和规模等.基于GIS可以将人口信息进行空间化的展示,还可以通过空间分析的方法计算出旅游景点辐射区的人 ...
- Java基础-多线程编程-1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。
1.随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread ...
- 动态树之LCT(link-cut tree)讲解
动态树是一类要求维护森林的连通性的题的总称,这类问题要求维护某个点到根的某些数据,支持树的切分,合并,以及对子树的某些操作.其中解决这一问题的某些简化版(不包括对子树的操作)的基础数据结构就是LCT( ...
- 中国175个 AAAAA级风景区,去过20个 以上,你就是旅游达人
省份 数量 景区名称 我 北京 7 故宫博物院 1 天坛公园 颐和园 1 八达岭-慕田峪长城旅游区 1 明十三陵景区(神路-定陵-长陵-昭陵) 恭王府景区 北京奥林匹克公园(鸟巢-水立方-中国科技馆- ...
随机推荐
- RangePartitioner 实现简记
摘要: 1.背景 2.rangeBounds 上边界数组源码走读 3.RangePartitioner的sketch 源码走读 4.determineBounds 源码走读 5.关于RangePart ...
- css3动画第一式--简单翻滚
在w3cschool上面查阅css3的动画语法手册时,发现“css3 动画”栏目首页放了一个翻滚的div动画案例,觉得挺好看的,于是就自己模仿着写了一下,感觉还行O(∩_∩)O哈哈~ 查看原地址 下面 ...
- MySQL 基础及性能优化工具
数据库,用户及权限 常用用户管理操作 # 创建本地用户 abc create user abc@localhost # 创建内网能够访问的用户 abc create user abc@'192.168 ...
- [转]PHP的执行流程,PHP扩展加载过程
原文:http://www.imsiren.com/archives/535 为了以后能开发PHP扩展..就一定要了解PHP的执行顺序..这篇文章就是为C开发PHP扩展做铺垫. web环境 我们假设为 ...
- 使用ZeroNet搭建P2P全球网站
软件 ZeroNet是一个利用比特币加密和BT技术提供不受审查的网络与通信的BT平台,ZeroNet网络功能已经得到完整的种子的支持和加密连接,保证用户通信和文件共享的安全.使用ZeroNet,你可以 ...
- 递推DP URAL 1260 Nudnik Photographer
题目传送门 /* 递推DP: dp[i] 表示放i的方案数,最后累加前n-2的数字的方案数 */ #include <cstdio> #include <algorithm> ...
- Linux(Redhat)下redis安装
原文:http://www.javaweb1024.com/data/NoSQL/2015/06/29/785.html redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系 ...
- list和set的区别
list和set的区别 相同点:list,set都是继承自collection接口 不同点: a.list-->元素有放入顺序,元素可重复 set-->元素无放入顺序,元素不可重复 b. ...
- Android M 特性 Doze and App Standby模式详解
版权声明:本文由郑桂涛原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/185 来源:腾云阁 https://www.qclo ...
- Oracle监控代理安装ITM(IBM Tivoli Monitoring)
1 监控代理安装 2 1.1 安装 2 1.1.1 解压安装包 2 1.1.2 安装 2 1.2 配置 5 1.2.1 给Agent授权 5 1.2.2 配置Oracle Agent 10 目录 1 ...