uoj#274. 【清华集训2016】温暖会指引我们前行
由于边权互不相同,只需用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】温暖会指引我们前行的更多相关文章
- [UOJ#274][清华集训2016]温暖会指引我们前行
[UOJ#274][清华集训2016]温暖会指引我们前行 试题描述 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了一 ...
- UOJ_274_[清华集训2016]温暖会指引我们前行_LCT
UOJ_274_[清华集训2016]温暖会指引我们前行_LCT 任务描述:http://uoj.ac/problem/274 本题中的字典序不同在于空串的字典序最大. 并且题中要求排序后字典序最大. ...
- [清华集训2016]温暖会指引我们前行——LCT+最大生成树
题目链接: [清华集训2016]温暖会指引我们前行 题目大意:有$n$个点$m$次操作,每次操作分为三种:1.在$u,v$两点之间连接一条编号为$id$,长度为$l$,温度为$t$的边.2.查询从$u ...
- 【bzoj4736/uoj#274】[清华集训2016]温暖会指引我们前行 语文题+LCT
题目描述 http://uoj.ac/problem/274 题解 语文题+LCT 对于这种语文题建议还是自己读题好一些... 读懂题后发现:由于温度互不相同,最大生成树上的路径必须走(不走的话温度大 ...
- UOJ274 [清华集训2016] 温暖会指引我们前行 【LCT】【最大生成树】
题目分析: 差评,最大生成树裸题.hack数据还卡常. 代码: #include<bits/stdc++.h> using namespace std; ; struct LCT{ ],d ...
- BZOJ 4732 UOJ #268 [清华集训2016]数据交互 (树链剖分、线段树)
题目链接 (BZOJ) https://www.lydsy.com/JudgeOnline/problem.php?id=4732 (UOJ) http://uoj.ac/problem/268 题解 ...
- [UOJ#276][清华集训2016]汽水[分数规划+点分治]
题意 给定一棵 \(n\) 个点的树,给定 \(k\) ,求 \(|\frac{\sum w(路径长度)}{t(路径边数)}-k|\)的最小值. \(n\leq 5\times 10^5,k\leq ...
- UOJ #274. 【清华集训2016】温暖会指引我们前行 [lct]
#274. [清华集训2016]温暖会指引我们前行 题意比较巧妙 裸lct维护最大生成树 #include <iostream> #include <cstdio> #incl ...
- 【UOJ274】【清华集训2016】温暖会指引我们前行 LCT
[UOJ274][清华集训2016]温暖会指引我们前行 任务描述 虽然小R住的宿舍楼早已来了暖气,但是由于某些原因,宿舍楼中的某些窗户仍然开着(例如厕所的窗户),这就使得宿舍楼中有一些路上的温度还是很 ...
- bzoj 4736 /uoj274【清华集训2016】温暖会指引我们前行 lct
[清华集训2016]温暖会指引我们前行 统计 描述 提交 自定义测试 寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 “冻死宝宝了!” 这时 远处的天边出现了 ...
随机推荐
- 动手动脑-Java的继承与多态
一. class Grandparent { public Grandparent() { System.out.println("GrandParent Created."); ...
- MySQL主从、环境搭建、主从配制
1. MySQL主从介绍 2.环境搭建 2.主从配制:修改主配制文件:vim /etc/my.cnf添加: server_id = ###log_bin = diy_name然后保存重启:/ ...
- NodeServices
NodeServices https://www.cnblogs.com/stulzq/p/10535310.html 一.前言 在 .NET Framework 时,我们可以通过V8.NET等组件来 ...
- 2017.4.4 TCP/IP协议栈
OSI和TCP/IP的各层协议总结: TCP/IP在封装和传输数据时,各层所做的工作:
- Blender设置界面语言
新安装的Blender默认是英文, 可通过如下方法修改界面语言: 1. 点开文件菜单{File},选择用户首选项{User Preferences}: 2. 在用户首选项{User Preferenc ...
- GinKgoCTF-Misc
一:谁动了我的校徽? Jpg改txt——>寻找——>GKCTF{This_is_a_huaji} 二:奇怪的压缩包1 六位数字的密码一点也不安全!!!!!! 下载压缩包——>有密码( ...
- How to generate a new dictionary file of mmseg
How to generate a new dictionary file of mmseg 0.Usage about mmseg-node memtioned in github : var mm ...
- Go Example--变量
package main import "fmt" //通过import导入fmt标准包 func main() { //定义变量,并初始化 var a string = &quo ...
- scanf() gets() fgets()使用注意事项
1.scanf() 遇到'\n'停止从输入缓冲区中接收,接收完后‘\n’还存在于缓冲区中.当输入的字符数少于缓冲区大小时,字符后面有自动补上‘\0’,当输入字符大于缓冲区时,也直接拷贝到缓冲中,因此缓 ...
- keycloak docker-compose 运行
内容很简单,主要是搭建一个可运行的keycloak 环境,方便开发测试,同时支持数据库的持久化 docker-compose 文件 version: "3" services: a ...