模板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. postgreSQL使用

    1.1. 安装     自然,在你想开始使用 PostgreSQL 之前, 你必须安装它.PostgreSQL 很有可能 已经安装到你的节点上了,因为它包含在你的操作系统的发布里, 或者是系统管理员已 ...

  2. Pyqt5 获取命令行参数sys.argv

    大家有没有注意到,很多软件都能接收第三方应用触发命令行参数,根据参数打开想要的效果. 在windows任务管理器调取命令行列,我们同样能看到进程中有好多是带有参数的. 现在,我们用Pyqt5 (Py3 ...

  3. Android app开发知识小结

    Android知识小结 这是一个知识的总结,所以没有详解的讲解. 一.分辨率Android中dp长度.sp字体使用.px像素.in英寸.pt英寸1/72.mm毫米 了解dp首先要知道density,d ...

  4. XStream、JAXB 日期(Date)、数字(Number)格式化输出xml

    XStream.Jaxb是java中用于对象xml序列化/反序列化 的经典开源项目,利用它们将对象转换成xml时,经常会遇到日期(Date).数字按指定格式输出的需求,下面是使用示例: 一.日期字段格 ...

  5. java mvc web 项目web.xml头改错了,死活加载不上springMvc的jar

    Description    Resource    Path    Location    TypeOne or more constraints have not been satisfied.  ...

  6. Magento 安装时文件权限 设置

    http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/magento_filesystem_permission ...

  7. 【推荐】使用Jquery+EasyUI进行框架项目开发案例讲解之一---员工管理源码分享

    使用Jquery+EasyUI 进行框架项目开发案例讲解之一 员工管理源码分享   在开始讲解之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery的U ...

  8. php 执行外部命令exec() system() passthru()

    php 执行部命令exec() system() passthru() 通常用c写一个外部小程序,然后使用上述命令可以在php中调用 1. exec() string exec ( string $c ...

  9. C 实现的算法篇

    算法的定义:算法是解决实际问题的一种精确的描述方法,目前,广泛认同的定义是:算法的模型分析的一组可行的确定的和有穷的规则 算法的五个特性:有穷性,确切性,输入,输出,可行性.目前算法的可执行的步骤非常 ...

  10. android开发之bitmap使用

    bitmap是android中重要的图像处理工具类,通过bitmap可以对图像进行剪切.旋转.缩放等操作,同时还可以指定格式和压缩质量保存图像文件. 一.拿到一个Bitmap对象 查看源码我们知道,B ...