AC日记——旅游 bzoj 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的更多相关文章
- AC日记——dispatching bzoj 2809
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3290 Solved: 1740[Submi ...
- AC日记——codevs1688求逆序对
AC日记--codevs1688求逆序对 锵炬 掭约芴巷 枷锤霍蚣 蟠道初盛 到被他尽情地踩在脚下蹂躏心中就无比的兴奋他是怎么都 ㄥ|囿楣 定要将他剁成肉泥.挫骨扬灰跟随着戴爷这么多年刁梅生 圃鳋 ...
- BZOJ 2157: 旅游( 树链剖分 )
树链剖分.. 样例太大了根本没法调...顺便把数据生成器放上来 -------------------------------------------------------------------- ...
- bzoj 2157: 旅游 (LCT 边权)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2157 题面; 2157: 旅游 Time Limit: 10 Sec Memory Lim ...
- BZOJ 2157: 旅游
2157: 旅游 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1347 Solved: 619[Submit][Status][Discuss] ...
- 【刷题】BZOJ 2157 旅游
Description Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间 ...
- BZOJ 2157 旅游(动态树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2157 [题目大意] 支持修改边,链上查询最大值最小值总和,以及链上求相反数 [题解] ...
- BZOJ 2157 旅游(树链剖分+线段树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2157 [题目大意] 支持修改边,链上查询最大值最小值总和,以及链上求相反数 [题解] ...
- AC日记——[Noi2011]阿狸的打字机 bzoj 2434
2434 思路: 构建ac自动机: 抽离fail树: 根据字符串建立主席树: 在线处理询问: 询问x在y中出现多少次,等同于y有多少字母的fail能走到x: 1a,hahahahah: 代码: #in ...
随机推荐
- Java CPU占用率高分析
首先,通过top命令找出CPU占用率高的进程: 然后,通过ps -o THREAD,tid,time -mp 2066命令找出执行时间最长的线程的TID 将有问题的TID转为16进制格式: print ...
- HDU1531 差分约束
King Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- CSS3知识之立方体动画效果
效果图:
- JS利用 Sea.js 实现模块化:拖拽、缩放及范围限制
知识点总结: Sea.js的使用:define.export.seajs.use.require等方法: 参考:http://seajs.org/docs/ Sea.js与require.js的区 ...
- AngularJs 中的CheckBox前后台交互
前台页面: <div class="form-group"> <label for="CompanyName" class="col ...
- vijos 1907 DP+滚动数组
描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告 ...
- [SDOI2011] 染色(Luogu 2486)
题目描述 输入输出格式 输入格式: 输出格式: 对于每个询问操作,输出一行答案. 输入输出样例 输入样例#1: 6 5 2 2 1 2 1 1 1 2 1 3 2 4 2 5 2 6 Q 3 5 C ...
- iOS 时间转换
#pragma mark - 获取当前时间戳 -(NSString *)getTimeSp{ NSDate* dat = [NSDate dateWithTimeIntervalSinceNow:]; ...
- 元类编程-- __new__和__init__的区别
class User: def __new__(cls, *args, **kwargs): print (" in new ") return super().__new__(c ...
- 前端表单序列化为json串,以及构造json数组、json串
var parm={ username:"zhangsan", age:24, email:"352400260@qq.com" }; console.log( ...