http://uoj.ac/problem/274

由于边权互不相同,只需用lct维护带加边的最大生成树

#include<bits/stdc++.h>
#define lc ch][0
#define rc ch][1
#define fa ch][2
#define rv ch][3
#define val ch][4
#define mv ch][5
#define len ch][6
#define sl ch][7
const int N=;
int ch[N][],stk[N];
int _(){
int x=,c=getchar();
while(c<)c=getchar();
while(c>)x=x*+c-,c=getchar();
return x;
}
int min(int a,int b){return a<b?a:b;}
int wc(int x){return x!=x[fa][lc];}
bool nrt(int x){return x==x[fa][lc]||x==x[fa][rc];}
void up(int x){
int l=x[lc],r=x[rc];
x[mv]=min(x[val],min(l[mv],r[mv]));
x[sl]=x[len]+l[sl]+r[sl];
}
void _rv(int x){
if(x)x[rv]^=,std::swap(x[lc],x[rc]);
}
void dn(int x){
if(x[rv]){
x[rv]=;
_rv(x[lc]);
_rv(x[rc]);
}
}
void rot(int x){
int f=x[fa],g=f[fa],d=wc(x);
if(nrt(f))g[ch][wc(f)]=x;
x[fa]=g;
(f[ch][d]=x[ch][d^])[fa]=f;
(x[ch][d^]=f)[fa]=x;
up(f);
}
void sp(int x,int z=){
int stp=;
for(int a=x;nrt(stk[++stp]=a);a=a[fa]);
for(;stp;dn(stk[stp--]));
while(nrt(x)&&x[fa]!=z){
int f=x[fa];
if(nrt(f)&&f[fa]!=z)rot(wc(x)==wc(f)?f:x);
rot(x);
}
up(x);
}
void acs(int x){
int x0=x,y=;
for(;x;sp(x),x[rc]=y,up(y=x),x=x[fa]);
sp(x0);
}
void mrt(int x){
acs(x),_rv(x);
}
void get(int x,int y){
mrt(x),acs(y),sp(x,y);
}
int n,m;
int main(){
n=_();
for(int i=;i<=n;++i)i[val]=i[mv]=0x3f3f3f3f;
for(m=_();m;--m){
int o=_();
if(o==){
int id=_()+n+,x=_()+,y=_()+,t=_(),l=_();
get(x,y);
id[val]=t,id[len]=l,up(id);
if(x[fa]!=y)x[fa]=id,id[fa]=y;
else if(x[rc][mv]<t){
int z=x[rc],tg=x[rc][mv];
for(;z[val]!=tg;dn(z),z=z[ch][z[lc][mv]!=tg]);
sp(z);
z[lc][fa]=z[rc][fa]=,z[lc]=z[rc]=,up(z);
mrt(x),x[fa]=id,id[fa]=y;
}
}else if(o==){
int x=_()+,y=_()+;
printf("%d\n",x==y?:(get(x,y),x[fa]!=y?-:x[rc][sl]));
}else{
int id=_()+n+,l=_();
sp(id),id[len]=l,up(id);
}
}
return ;
}

uoj#274. 【清华集训2016】温暖会指引我们前行的更多相关文章

  1. [UOJ#274][清华集训2016]温暖会指引我们前行

    [UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...

  2. UOJ_274_[清华集训2016]温暖会指引我们前行_LCT

    UOJ_274_[清华集训2016]温暖会指引我们前行_LCT 任务描述:http://uoj.ac/problem/274 本题中的字典序不同在于空串的字典序最大. 并且题中要求排序后字典序最大. ...

  3. [清华集训2016]温暖会指引我们前行——LCT+最大生成树

    题目链接: [清华集训2016]温暖会指引我们前行 题目大意:有$n$个点$m$次操作,每次操作分为三种:1.在$u,v$两点之间连接一条编号为$id$,长度为$l$,温度为$t$的边.2.查询从$u ...

  4. 【bzoj4736/uoj#274】[清华集训2016]温暖会指引我们前行 语文题+LCT

    题目描述 http://uoj.ac/problem/274 题解 语文题+LCT 对于这种语文题建议还是自己读题好一些... 读懂题后发现:由于温度互不相同,最大生成树上的路径必须走(不走的话温度大 ...

  5. UOJ274 [清华集训2016] 温暖会指引我们前行 【LCT】【最大生成树】

    题目分析: 差评,最大生成树裸题.hack数据还卡常. 代码: #include<bits/stdc++.h> using namespace std; ; struct LCT{ ],d ...

  6. BZOJ 4732 UOJ #268 [清华集训2016]数据交互 (树链剖分、线段树)

    题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4732 (UOJ) http://uoj.ac/problem/268 题解 ...

  7. [UOJ#276][清华集训2016]汽水[分数规划+点分治]

    题意 给定一棵 \(n\) 个点的树,给定 \(k\) ,求 \(|\frac{\sum w(路径长度)}{t(路径边数)}-k|\)的最小值. \(n\leq 5\times 10^5,k\leq ...

  8. UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]

    #274. [清华集训2016]温暖会指引我们前行 题意比较巧妙 裸lct维护最大生成树 #include <iostream> #include <cstdio> #incl ...

  9. 【UOJ274】【清华集训2016】温暖会指引我们前行 LCT

    [UOJ274][清华集训2016]温暖会指引我们前行 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户),这就使得宿舍楼中有一些路上的温度还是很 ...

  10. bzoj 4736 /uoj274【清华集训2016】温暖会指引我们前行 lct

    [清华集训2016]温暖会指引我们前行 统计 描述 提交 自定义测试 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了 ...

随机推荐

  1. vue 移动端的一些ui

    https://www.jianshu.com/p/b79b3b721cd5 Vant. YDUI. Vonic. buefy (bluma的ui) Vux

  2. LOJ 6277:数列分块入门 1(分块入门)

    #6277. 数列分块入门 1 内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计讨论 3 测试数据 题目描述 给出一 ...

  3. Sping--注解(一) 常用注解总结

    Sping注解是很重要的一块.今天在这里对常用到的注解做个小结,会尽可能说得详细些. 推荐这个英文文档,官方文档当然是最好的.最近发现,学习东西,还是多看官方文档,最权威,最详细. https://d ...

  4. Json工具类JsonUtil

    import com.alibaba.fastjson.JSONArray; import com.fasterxml.jackson.core.JsonProcessingException; im ...

  5. linux http配置

    yum install httpd 安装http服务器 启动http服务器即可访问 如果不行的话,试着执行命令 firewall-cmd –permanent –add-service=http(该命 ...

  6. postgresql的基本使用,以及数据库的备份与恢复

    安装过程没什么说的,基本是一直下一步下一步,就是中间需要输入密码之类的 postgresql使用模式是数据库表,视图等的集合,我们可以自荐创建一个schema 创建表的方法 进入sql命令行窗口的方法 ...

  7. C++中的const关键字学习笔记

    一.const引用 1. 例子一 #include <iostream> using namespace std; class sp { public: sp() {cout<< ...

  8. MATLAB中多个一维数组的合并

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u013538664/article/details/37673711 1.一维数组直接合并      ...

  9. day 29 socketsetserver 模块

    1.FTP上传/下载服务端/客户端. --------------------------------------------------------------------------------- ...

  10. .Net Core 应用方向 图谱

    .Net Core 应用方向 图谱,  如下图 : 大规模并行计算 是 大数据 和 人工智能 的 基础, 是 未来 大计算能力 的 基础, 网格计算 是 未来 大计算能力 的 一个 分支 . 所以, ...