模板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的更多相关文章

  1. [bzoj2157]旅游 (lct)

    这个应该也算裸的模板题吧..主要是边权的问题,对于每条边u->v,我们可以新建一个节点代替他,把边的信息弄到新的点上,就变成u->x->v了... 当然了这样的话要防止u和v这些没用 ...

  2. BZOJ2157: 旅游

    传送门 先讲一个悲伤地故事 RunID User Problem Result Memory Time Language Code_Length Submit_Time 1635823 Cydiate ...

  3. 【BZOJ2157】旅游(树链剖分,Link-Cut Tree)

    [BZOJ2157]旅游(树链剖分,Link-Cut Tree) 题面 Description Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥 ...

  4. 旅游公司招聘Java工程师

    公司招聘:岗位要求如下 Java开发工程师工作内容1.根据需求完成软件系统代码的开发,测试以及文档撰写工作:2.分析并解决客户的问题:3.配合业务部门进行数据分析以及系统优化 岗位要求:1.本科以上学 ...

  5. 一堆LCT板子

    搞了一上午LCT,真是累死了-- 以前总觉得LCT高大上不好学不好打,今天打了几遍感觉还可以嘛= =反正现在的水平应付不太难的LCT题也够用了,就这样好了,接下来专心搞网络流. 话说以前一直YY不出来 ...

  6. 基于GIS的旅游辐射区人口统计

    在旅游规划中,考虑旅游景点周边的人口负载量是很重要的一个方面,这将直接影响资源的投入和配置,开发潜力和规模等.基于GIS可以将人口信息进行空间化的展示,还可以通过空间分析的方法计算出旅游景点辐射区的人 ...

  7. Java基础-多线程编程-1.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。

    1.随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread ...

  8. 动态树之LCT(link-cut tree)讲解

    动态树是一类要求维护森林的连通性的题的总称,这类问题要求维护某个点到根的某些数据,支持树的切分,合并,以及对子树的某些操作.其中解决这一问题的某些简化版(不包括对子树的操作)的基础数据结构就是LCT( ...

  9. 中国175个 AAAAA级风景区,去过20个 以上,你就是旅游达人

    省份 数量 景区名称 我 北京 7 故宫博物院 1 天坛公园 颐和园 1 八达岭-慕田峪长城旅游区 1 明十三陵景区(神路-定陵-长陵-昭陵) 恭王府景区 北京奥林匹克公园(鸟巢-水立方-中国科技馆- ...

随机推荐

  1. RangePartitioner 实现简记

    摘要: 1.背景 2.rangeBounds 上边界数组源码走读 3.RangePartitioner的sketch 源码走读 4.determineBounds 源码走读 5.关于RangePart ...

  2. css3动画第一式--简单翻滚

    在w3cschool上面查阅css3的动画语法手册时,发现“css3 动画”栏目首页放了一个翻滚的div动画案例,觉得挺好看的,于是就自己模仿着写了一下,感觉还行O(∩_∩)O哈哈~ 查看原地址 下面 ...

  3. MySQL 基础及性能优化工具

    数据库,用户及权限 常用用户管理操作 # 创建本地用户 abc create user abc@localhost # 创建内网能够访问的用户 abc create user abc@'192.168 ...

  4. [转]PHP的执行流程,PHP扩展加载过程

    原文:http://www.imsiren.com/archives/535 为了以后能开发PHP扩展..就一定要了解PHP的执行顺序..这篇文章就是为C开发PHP扩展做铺垫. web环境 我们假设为 ...

  5. 使用ZeroNet搭建P2P全球网站

    软件 ZeroNet是一个利用比特币加密和BT技术提供不受审查的网络与通信的BT平台,ZeroNet网络功能已经得到完整的种子的支持和加密连接,保证用户通信和文件共享的安全.使用ZeroNet,你可以 ...

  6. 递推DP URAL 1260 Nudnik Photographer

    题目传送门 /* 递推DP: dp[i] 表示放i的方案数,最后累加前n-2的数字的方案数 */ #include <cstdio> #include <algorithm> ...

  7. Linux(Redhat)下redis安装

    原文:http://www.javaweb1024.com/data/NoSQL/2015/06/29/785.html redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系 ...

  8. list和set的区别

    list和set的区别 相同点:list,set都是继承自collection接口 不同点: a.list-->元素有放入顺序,元素可重复  set-->元素无放入顺序,元素不可重复 b. ...

  9. Android M 特性 Doze and App Standby模式详解

    版权声明:本文由郑桂涛原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/185 来源:腾云阁 https://www.qclo ...

  10. 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  ...