在ISA的指点下,彻底理解了lct(以前可能学了假的lct

这个题不难想,就是倒着加边然后维护链上信息。。

但这题常数巨卡,卡map卡开局不上kruskal卡多余splay卡少用splay。

一般这种题wc是要开o2的吧,,所以在开o2的网站上轻松跑过了,bzoj辣鸡

lct易错点:

1、isrt【】不是()

2、splay提前down,不提前down莫名错(理论上应该一样,但很玄学就是我写的不行)

3、up在set和access    稍微想一下就知道了

4、rev打标记不做,和线段树不一样(理论上应该一样,但很玄学就是我写的不行)

5、isrt分清fu和o

6、拆边做点注意数组i和i+n对应关系 (调了半天)

码(bzoj被卡,其他网站应该能过):

#include<iostream>
#include<cstdio>
#include<map>
using namespace std;
#define N 1100005
map<int,map<int,int> >tu;
int v[N],maxx[N],from[N],n,m,q,i,j,ch[N][2],rev[N],fu[N],lx[N],a[N],b[N],ans[N],x[N],y[N];
bool bb[N] ;int read()
{char ch = getchar();for ( ; ch > '9' || ch < '0'; ch = getchar());int tmp = 0;for ( ; '0' <= ch && ch <= '9'; ch = getchar())tmp = tmp * 10 + int(ch) - 48;return tmp;
}
int getwh(int o)
{return ch[fu[o]][0]==o?0:1;
}void up(int o)
{maxx[o]=v[o];from[o]=o;if(ch[o][0]>0&&maxx[ch[o][0]]>maxx[o]){maxx[o]=maxx[ch[o][0]];from[o]=from[ch[o][0]];}if(ch[o][1]>0&&maxx[ch[o][1]]>maxx[o]){maxx[o]=maxx[ch[o][1]];from[o]=from[ch[o][1]];}
}
void down(int o)
{if(rev[o]){rev[o]^=1;rev[ch[o][0]]^=1;rev[ch[o][1]]^=1;swap(ch[o][0],ch[o][1]);     }
}
bool isrt(int o)
{if(fu[o]==0)return 1;if(ch[fu[o]][0]==o||ch[fu[o]][1]==o)return 0;return 1;
}
void set(int o,int wh,int child)
{ch[o][wh]=child;fu[child]=o;up(o);
}
void rotate(int o)
{int fa=fu[o];int ye=fu[fa];bool ysg=0;if(isrt(fa))ysg=1;int wh=getwh(o);set(fa,wh,ch[o][wh^1]);set(o,wh^1,fa);fu[o]=ye;if(ysg==0)ch[ye][ch[ye][0]==fa?0:1]=o;
}
int sta[N];
void splay(int o)
{int top=0,i=o;sta[++top]=o;for(;isrt(i)==0;i=fu[i]){sta[++top]=fu[i];}for(i=top;i>=1;i--)down(sta[i]);int last=0;for(;isrt(o)==0;rotate(o))if(isrt(fu[o])==0)getwh(fu[o])==getwh(o)?rotate(fu[o]):rotate(o);
}
void access(int o)
{int last=0;for(;o!=0;last=o,o=fu[o]){splay(o);ch[o][1]=last;up(o);        }
}
void huan(int o)
{access(o);splay(o);rev[o]^=1;
}
void link(int x,int y)
{
huan(x);fu[x]=y;access(x);
}
void cut(int x,int y)
{huan(x);access(y);splay(y);ch[y][0]=fu[x]=0;
}
int main()
{//freopen("tube_strong.in","r",stdin);//freopen("tube_strong.out","w",stdout);n=read();m=read();q=read();for(i=1;i<=m;i++){a[i]=read(),b[i]=read(),v[i+n]=read();tu[a[i]][b[i]]=tu[b[i]][a[i]]=i;      }for(i=1;i<=q;i++){lx[i]=read(),x[i]=read(),y[i]=read();  if(lx[i]==2){bb[tu[x[i]][y[i]]]=1;}}for(i=1;i<=m;i++){        if(bb[i]==0){
//      if(a[i]==7&&b[i]==14)
//cout<<endl<<a[i]<<" "<<b[i];            access(a[i]);splay(a[i]);int lin=a[i];while(ch[lin][0]!=0)lin=ch[lin][0];access(b[i]);splay(b[i]);int lin2=b[i];while(ch[lin2][0]!=0)lin2=ch[lin2][0];    if(lin==lin2){huan(a[i]);access(b[i]);splay(b[i]);int lin3=from[b[i]];if(maxx[b[i]]>v[i+n]){//if(lin3<n)cout<<"wocaonima";cut(lin3,a[lin3-n]);cut(lin3,b[lin3-n]);link(a[i],i+n);link(b[i],i+n);}}else{link(a[i],i+n);link(i+n,b[i]);     }}  }for(j=q;j>=1;j--){if(lx[j]==2){i=tu[x[j]][y[j]];access(a[i]);splay(a[i]);int lin=a[i];while(ch[lin][0]!=0)lin=ch[lin][0];access(b[i]);splay(b[i]);int lin2=b[i];while(ch[lin2][0]!=0)lin2=ch[lin2][0];huan(a[i]);access(b[i]);splay(b[i]);int lin3=from[b[i]];if(maxx[b[i]]>v[i+n]){cut(lin3,a[lin3-n]);cut(lin3,b[lin3-n]);link(a[i],i+n);link(b[i],i+n);}           }else{huan(x[j]);access(y[j]);splay(y[j]);      ans[j]=maxx[y[j]];     }  }for(i=1;i<=q;i++){if(lx[i]==1){printf("%d\n",ans[i]);}}
}

2017.10.16 水管局长水管局长数据加强版 思考记录相关推荐

  1. 杂记2017.10.16

    杂记2017.10.16 ---------------- 2017.4.11 1,pivot是UI的图形中心.0.5,0.5表示该UI的原点在其图形正中 0,0表示该UI的原点在其图形左上角. 2, ...

  2. 2017.10.16 装箱和拆箱﹑火星车的升级

    装箱和拆箱(jdk1.5之后的新特性) 基本类型包装器 区别:基本类型重效率﹑包装器重功能 例: package com.dayuanit.test;public class TestLesson00 ...

  3. 2017.10.16 队内互测 D4

    题目来源: T1:codevs 2913 建筑抢修 T2:codevs 1089 侦探推理 T3:luogu 2246 T4:luogu 3927 ps:T2没有重新做,太恶心了 T1: -考试的时候 ...

  4. 2017.10.16离线赛总结

    draw --3787 思路:这是源自一个岛国的游戏- 思考一下画鬼脚的本质,一条竖线其实就是一次对相邻两个元素的交换操作. 所以,模拟画鬼脚的时候,只需要按照高度从高到低,依次进行所有的交换操作即可 ...

  5. 2017.9.21 所驼门王的宝藏 思考记录

    .并不知道哪里错了,所以就在错误的地方打了个表... 如果所有的点都在横移,那建边就是n^2的 所以就建一个点,向其他点连边,如果有横移就直接连 然后tarjan缩点,注意虚拟点是没有贡献的,所以sz ...

  6. 2017.3.26 最长双回文串 思考记录

    学一下manacher.. 主要思想就是利用回文的性质找对称点来往外扩 这个题还需要求双回文串..就统计一下 从一个点往右的最长回文串长度   和   从一个点往左的最长回文串长度 再枚举断点即可 码 ...

  7. BZOJ_2594_[Wc2006]水管局长数据加强版_LCT

    BZOJ_2594_[Wc2006]水管局长数据加强版_LCT Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供 ...

  8. 2017.2.16 开涛shiro教程-第十七章-OAuth2集成(一)服务器端

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 开涛shiro教程-第十七章-OAuth2集成 1.OAuth2介 ...

  9. 大搜车Java面试 2017.10.30

    大搜车Java面试 2017.10.30 杭州余杭区办公环境一般,两层一栋的办公楼,但是开发工位是连成一片的没有卡位一说.比较拥挤. 面试两轮技术面,总共耗时3小时,各种等待就有1小时,最后人事说三天 ...

最新文章

  1. leetcode 152. Maximum Product Subarry
  2. linux中的改变bin级别,Linux常用命令
  3. SQLServer数据库实例相关知识笔记
  4. php如何拼接数组,PHP怎么合并数组
  5. Apollo进阶课程㉙丨Apollo控制技术详解——控制器的类型
  6. php 正则提取日期,PHP正则匹配日期和时间(时间戳转换)的实例代码
  7. Maven入门基础-环境篇
  8. 微软服务器虚拟化-Hyper-v详解
  9. windows下将多个文件里面的内容合并成一个一个文件
  10. ProjectManage.rar 自动生成模板
  11. scrollLeft/scrollTop,offsetLeft/offsetTop,clientLeft/clientTop
  12. js Tree(梅花雪)最简单的例子(来字MEIZZ)
  13. 为什么要隐藏ip地址
  14. jzoj 1388. 【2012.02.25普及组】探索的奶牛
  15. wro4j:Java Web资源压缩
  16. 领导者应该具备的基本素质
  17. 3D U-Net论文笔记
  18. 震旦199打印机扫描A4文件
  19. cad模型轻量化_保持外观的CAD模型轻量化技术
  20. 论文笔记-DEC (Deep Embedded Clustering)

热门文章

  1. Spark之RDD实战篇3
  2. 气动调节阀基本结构图
  3. 计算机图形学E5——OpenGL 扫描线填充
  4. 【SpringBoot基础知识】如何在springboot中使用多线程
  5. 今天学到的几个有用的awk命令用法
  6. day7 java的构造器
  7. ajax编写前台的时候,列表显示部分,表格显示不出来,但是可以获取到数据
  8. LoRa、LoRaWAN及网关相关技术介绍
  9. python测验2_测验2: Python基础语法(上) (第4周)
  10. linux shell转换时间格式,在bash中转换日期格式