2157

思路:

  LCT;

代码:

#include <bits/stdc++.h>
using namespace std;
#define maxn 400005
#define INF 0x3f3f3f3f
int n,val[maxn],sum[maxn],Max[maxn],Min[maxn],ch[maxn][];
int rev[maxn],flag[maxn],f[maxn],top,st[maxn],m,cur[maxn],id;
inline void in(int &now)
{
int if_z=;now=;
char Cget=getchar();
while(Cget>''||Cget<'')
{
if(Cget=='-') if_z=-;
Cget=getchar();
}
while(Cget>=''&&Cget<='')
{
now=now*+Cget-'';
Cget=getchar();
}
now*=if_z;
}
void updata(int now)
{
int l=ch[now][],r=ch[now][];
Max[now]=max(Max[l],Max[r]);
Min[now]=min(Min[l],Min[r]);
if(now>n) Max[now]=max(Max[now],val[now]);
if(now>n) Min[now]=min(Min[now],val[now]);
sum[now]=sum[l]+sum[r]+val[now];
}
void rever(int now)
{
sum[now]=-sum[now];
val[now]=-val[now];
swap(Max[now],Min[now]);
Min[now]=-Min[now];
Max[now]=-Max[now];
flag[now]^=;
}
void pushdown(int now)
{
int l=ch[now][],r=ch[now][];
if(flag[now])
{
flag[now]=;
if(l) rever(l);
if(r) rever(r);
}
if(rev[now])
{
rev[now]^=,rev[l]^=,rev[r]^=;
swap(ch[now][],ch[now][]);
}
}
bool isroot(int now)
{
return (ch[f[now]][]!=now)&&(ch[f[now]][]!=now);
}
void rotate(int &now)
{
int fa=f[now],ffa=f[fa],l,r;
if(ch[fa][]==now) l=;else l=;r=l^;
if(!isroot(fa))
{
if(ch[ffa][]==fa) ch[ffa][]=now;
else ch[ffa][]=now;
}
f[now]=ffa,f[fa]=now,f[ch[now][r]]=fa;
ch[fa][l]=ch[now][r],ch[now][r]=fa;
updata(fa),updata(now);
}
void splay(int now)
{
top=;st[++top]=now;
for(int i=now;!isroot(i);i=f[i]) st[++top]=f[i];
while(top) pushdown(st[top--]);
while(!isroot(now))
{
int fa=f[now],ffa=f[fa];
if(!isroot(fa))
{
if(ch[fa][]==now^ch[ffa][]==fa) rotate(now);
else rotate(fa);
}
rotate(now);
}
}
void access(int now)
{
for(int t=;now;t=now,now=f[now]) splay(now),ch[now][]=t,updata(now);
}
void makeroot(int now)
{
access(now);
splay(now);
rev[now]^=;
}
void split(int x,int y)
{
makeroot(x);
access(y);
splay(y);
}
void link(int x,int y)
{
makeroot(x),f[x]=y;
}
int main()
{
freopen("nt2011_travel.in","r",stdin);
freopen("nt2011_travel.out","w",stdout);
in(n);
for(int i=;i<=n;i++) Max[i]=-INF,Min[i]=INF;
int u,v,w;id=n;
for(int i=;i<n;i++)
{
in(u),in(v),in(w),cur[i]=++id;
link(u+,id),link(v+,id);
val[id]=sum[id]=Max[id]=Min[id]=w;
}
in(m);
char ch[];
while(m--)
{
scanf("%s",ch),in(u),in(v);
if(ch[]=='C') splay(cur[u]),val[cur[u]]=v,updata(cur[u]);
else if(ch[]=='N') split(u+,v+),rever(v+);
else if(ch[]=='S') split(u+,v+),printf("%d\n",sum[v+]);
else if(ch[]=='A') split(u+,v+),printf("%d\n",Max[v+]);
else split(u+,v+),printf("%d\n",Min[v+]);
}
return ;
}

AC日记——旅游 bzoj 2157的更多相关文章

  1. AC日记——dispatching bzoj 2809

    2809: [Apio2012]dispatching Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3290  Solved: 1740[Submi ...

  2. AC日记——codevs1688求逆序对

    AC日记--codevs1688求逆序对 锵炬 掭约芴巷 枷锤霍蚣 蟠道初盛 到被他尽情地踩在脚下蹂躏心中就无比的兴奋他是怎么都 ㄥ|囿楣 定要将他剁成肉泥.挫骨扬灰跟随着戴爷这么多年刁梅生 圃鳋 ...

  3. BZOJ 2157: 旅游( 树链剖分 )

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

  4. bzoj 2157: 旅游 (LCT 边权)

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

  5. BZOJ 2157: 旅游

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

  6. 【刷题】BZOJ 2157 旅游

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

  7. BZOJ 2157 旅游(动态树)

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

  8. BZOJ 2157 旅游(树链剖分+线段树)

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

  9. AC日记——[Noi2011]阿狸的打字机 bzoj 2434

    2434 思路: 构建ac自动机: 抽离fail树: 根据字符串建立主席树: 在线处理询问: 询问x在y中出现多少次,等同于y有多少字母的fail能走到x: 1a,hahahahah: 代码: #in ...

随机推荐

  1. Unity3D开发七惑

    使用Unity3D开发也有大半年了,心中存惑如下,愿与各位开发者一起探讨: (1)  远离普适编程之惑 随着游戏引擎的不断发展,游戏程序员的开发层级也越来越高,以unity3d尤为突出.如果是进行We ...

  2. gitlab 的使用策略和简单介绍

    gitlab 作为版本控制器,基本使用和github 相同,以下是一些策略和介绍: Git 分支管理策略可以参考下面三个链接: http://www.ruanyifeng.com/blog/2012/ ...

  3. 51Nod 1031 骨牌覆盖 | Fibonacci

    Input 输入N(N <= 1000) Output 输出数量 Mod 10^9 + 7 Input示例 3 Output示例 3 思路:对于第x块骨牌的情况,我们用a[x]表示其方法数:其比 ...

  4. struts2之OGNL用法

    浅析OGNL OGNL是Object-GraphNavigation Language的缩写,是一种功能强大的表达式语言 通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对 ...

  5. redis 模糊查找keys

    Redis入门教程可参考:超强.超详细Redis数据库入门教程 Redis操作命令可参考:Redis操作命令总结 redis可以通过命令Keys Match来进行键值的模糊匹配,借助StackExch ...

  6. css 实现元素水平垂直居中总结5中方法

    个人总结,如有错误请指出,有好的建议请留言.o(^▽^)o 一.margin:0 auto:text-align:center:line-height方法 <div id="divAu ...

  7. Eclipse Tomcat Project报错:HTTP Status 404错误

    想要在eclipse里部署tomcat,结果tomcat单独可以通过连接测试,用eclipse就404了 404肯定都是目录不对,试了半天在eclipse下改了一下配置和文件位置就行了 1.先在菜单栏 ...

  8. 表格td内容超出宽度显示... table-layout: fixed;

    td宽度用百分比固定好的时候,即使设置了 white-space:nowrap;/*文本不会换行,在同一行显示*/ overflow:hidden;超出隐藏 text-overflow:ellipsi ...

  9. bzoj 1912 tree_dp

    这道题我们加一条路可以减少的代价为这条路两端点到lca的路径的长度,相当于一条链,那么如果加了两条链的话,这两条链重复的部分还是要走两遍,反而对答案没有了贡献(其实这个可以由任意两条链都可以看成两条不 ...

  10. 使用EL表达式需要注意的

    1.表达式与Java无关,表达式都是以${开始,以}结束. 2.EL访问java变量不能直接访问,因为得不到数据,要访问数据,需要将其放到作用域中.而使用<%=java变量%>可以访问ja ...