模板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. bzoj 2157: 旅游 (LCT 边权)

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

  3. BZOJ2157: 旅游

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

  4. BZOJ2157旅游——树链剖分+线段树

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

  5. BZOJ2157: 旅游 树链剖分 线段树

    http://www.lydsy.com/JudgeOnline/problem.php?id=2157   在对树中数据进行改动的时候需要很多pushdown(具体操作见代码),不然会wa,大概原因 ...

  6. 【树链剖分】【线段树】bzoj2157 旅游

    #include<cstdio> #include<algorithm> using namespace std; #define INF 2147483647 #define ...

  7. 「TJOI2015」旅游 解题报告

    「TJOI2015」旅游 LCT沙比题 考虑我们其实是在维护一条链的\(\max\limits_{i<j} v_j-v_i\) 每次直接拿左右子树更新一下就可以了 写的时候把两个方向都维护一下, ...

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

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

  9. 【BZOJ2157】旅游 树链剖分+线段树

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

随机推荐

  1. 一个小型的CMS后台管理平台发布啦~

    由于我不太懂怎么把博客园里我上传的文件共享,所以只好先放到百度网盘里了 数据库和发布的网站都放在这里 http://pan.baidu.com/s/1eQw3DOA 有问题请参考以下链接: http: ...

  2. 统计单词数(WordCount)

    1.首先新建两个文件夹: 往文件夹添加内容: 2.启动hadoop-查看是否启动成功. 3.先对nameNode进行初始化. 4.查看hadoop下面有哪些文件. 5.在hadoop目录下创建inpu ...

  3. [转]PLSQL Developer备份恢复oracle数据

    本文转自:http://www.cnblogs.com/iampkm/archive/2013/06/09/3128273.html 使用PL sql提供的功能可以快速的备份恢复oracle数据. 1 ...

  4. 【转载】LoadRunner11下载以及详细破解说明

    前期准备:LoadRunner11 下载请猛戳这里 传送门LoadRunner破解文件 下载请猛戳这里 传送门LoadRunner注册表清理工具 下载请猛戳这里 传送门 LoadRunner11破解方 ...

  5. NGUI例子Scroll View场景中item添加点击后自动滑到终点

    http://blog.csdn.net/luyuncsd123/article/details/22914497 最近在做一个项目的UI,需求是1.拖动items后当永远有一个item保存在中间位置 ...

  6. UITableViewCell Property “icon” cannot be found in forward class object “DJWeiBo”

    UITableViewCell 自定义表格 实体属性不显示错误 Property “icon” cannot be found in forward class object “DJWeiBo”引入实 ...

  7. [翻译]创建ASP.NET WebApi RESTful 服务(8)

    本章讨论创建安全的WebApi服务,到目前为止,我们实现的API都是基于未加密的HTTP协议,大家都知道在Web中传递身份信息必须通过HTTPS,接下来我们来实现这一过程. 使用HTTPS 其实可以通 ...

  8. Hive查询结果批量插入分区

    在hive的数据建表时,为了查询的高效性,我们经常会对表建立分区,例如下面的表 create external table dm_fan_photo_icf_basic(user string, it ...

  9. dns劫持分析

    最近在做dns解析,关注的重点在查询域名ns记录上,异常日志中捕获到一个域名,dig查询: 查询请求类型为ns,dig结果确只有一条A记录.处于好奇,查询类型改为a类型: 这个域名dig 查询A记录, ...

  10. css之盒子模型案例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...