P4172 [WC2006]水管局长(LCT)
LCT维护最小生成树,边权化点权。类似 P2387 [NOI2014]魔法森林(LCT)
离线存储询问,倒序处理,删边改加边。
#include<iostream>
#include<cstdio>
#include<cstring>
#define rint register int
using namespace std;
inline void Swap(int &a,int &b){a^=b^=a^=b;}
void read(int &x){
static char c=getchar();x=;
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') x=x*+(c^),c=getchar();
}
#define M 200005
int n,m,Q,ch[M][],fa[M],val[M],s[M],rev[M]; bool del[M];
int mp[][],p1[M],p2[M],p3[M],q1[M],q2[M],q3[M],ans[M];
#define lc ch[x][0]
#define rc ch[x][1]
inline bool nrt(int x){return ch[fa[x]][]==x||ch[fa[x]][]==x;}
void up(int x){//维护最大边化为的点的编号
s[x]=x;
if(val[s[lc]]>val[s[x]]) s[x]=s[lc];
if(val[s[rc]]>val[s[x]]) s[x]=s[rc];
}
inline void Rev(int x){Swap(lc,rc),rev[x]^=;}
void down(int x){if(rev[x])Rev(lc),Rev(rc),rev[x]^=;}
void Pre(int x){if(nrt(x))Pre(fa[x]); down(x);}
void turn(int x){
int y=fa[x],z=fa[y],l=(ch[y][]==x),r=l^;
if(nrt(y)) ch[z][ch[z][]==y]=x;
fa[ch[x][r]]=y; fa[y]=x; fa[x]=z;
ch[y][l]=ch[x][r]; ch[x][r]=y;
up(y); up(x);
}
void splay(int x){
Pre(x);
for(;nrt(x);turn(x)){
int y=fa[x],z=fa[y];
if(nrt(y)) turn((ch[y][]==z)^(ch[z][]==y)?x:y);
}
}
void access(int x){for(int y=;x;y=x,x=fa[x])splay(x),rc=y,up(x);}
inline void makert(int x){access(x),splay(x),Rev(x);}
int findrt(int x){
access(x);splay(x);down(x);
while(lc) x=lc,down(x);
splay(x); return x;
}
void link(int x,int y){makert(x); if(findrt(y)!=x) fa[x]=y;}
void cut(int x,int y){
makert(x);
if(findrt(y)==x&&fa[y]==x&&!ch[y][]) fa[y]=rc=,up(x);
}
inline void split(int x,int y){makert(x),access(y),splay(y);}
void ins(int i){
bool is=;
if(findrt(p1[i])==findrt(p2[i])){//已经连在一起
split(p1[i],p2[i]); int w=s[p2[i]];
if(val[w]>p3[i])
cut(p1[w-n],w),cut(w,p2[w-n]);//删除最大边
else is=;
}if(is) link(p1[i],n+i),link(n+i,p2[i]);
}
int main(){
read(n);read(m);read(Q);
for(rint i=;i<=m;++i){
read(p1[i]),read(p2[i]),read(p3[i]);
mp[p1[i]][p2[i]]=mp[p2[i]][p1[i]]=i;
val[n+i]=p3[i];
}
for(rint i=;i<=Q;++i){
read(q1[i]),read(q2[i]),read(q3[i]);
if(q1[i]==) del[mp[q2[i]][q3[i]]]=;
}
for(rint i=;i<=m;++i) if(!del[i]) ins(i);
for(rint i=Q;i>=;--i){//倒序处理询问
if(q1[i]==) ins(mp[q2[i]][q3[i]]);
else split(q2[i],q3[i]),ans[i]=val[s[q3[i]]];
}
for(rint i=;i<=Q;++i) if(q1[i]==) printf("%d\n",ans[i]);
return ;
}
P4172 [WC2006]水管局长(LCT)的更多相关文章
- P4172 [WC2006]水管局长 LCT维护最小生成树
\(\color{#0066ff}{ 题目描述 }\) SC 省 MY 市有着庞大的地下水管网络,嘟嘟是 MY 市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的 ...
- luogu P4172 [WC2006]水管局长 LCT维护动态MST + 离线
Code: #include<bits/stdc++.h> #define maxn 1200000 #define N 120000 using namespace std; char ...
- P4172 [WC2006]水管局长
P4172 [WC2006]水管局长 前言 luogu数据太小 去bzoj,他的数据大一些 思路 正着删不好维护 那就倒着加,没了 LCT维护他的最小生成树MST 树上加一条边肯定会有一个环 看看环上 ...
- 洛谷P4172 [WC2006]水管局长(lct求动态最小生成树)
SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一条从A至B的水管的路径, ...
- [洛谷P4172] WC2006 水管局长
问题描述 SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一条从A至B的水 ...
- 洛谷P4172 [WC2006]水管局长 (LCT,最小生成树)
洛谷题目传送门 思路分析 在一个图中,要求路径上最大边边权最小,就不难想到最小生成树.而题目中有删边的操作,那肯定是要动态维护啦.直接上LCT维护边权最小值(可以参考一下蒟蒻的Blog) 这时候令人头 ...
- 洛谷.4172.[WC2006]水管局长(LCT Kruskal)
题目链接 洛谷(COGS上也有) 不想去做加强版了..(其实处理一下矩阵就好了) 题意: 有一张图,求一条x->y的路径,使得路径上最长边尽量短并输出它的长度.会有<=5000次删边. 这 ...
- Luogu P4172 [WC2006]水管局长
题意 给定一个 \(n\) 个点 \(m\) 条边的图和 \(q\) 次操作,每次操作分为以下两种: 1 u v:查询 \(u\) 到 \(v\) 的一条路径使得边权最大的边的权值最小. 2 u v: ...
- 洛谷4172 WC2006水管局长(LCT维护最小生成树)
这个题和魔法森林感觉有很相近的地方啊 同样也是维护一个类似最大边权最小的生成树 但是不同的是,这个题是有\(cut\)和询问,两种操作.... 这可如何是好啊? 我们不妨倒着来考虑,假设所有要\(cu ...
随机推荐
- 合理利用配置不同的机器资源做redis cluster的server
Redis cluster可以使用不同配置的机器学习因为我们可以手动调整不同的机器所承担的slot的个数,这样内存小CPU相对少的机器应该承担更少的slots
- Dropout正则化和其他方法减少神经网络中的过拟合
1. 什么是Dropout(随机失活) 就是在神经网络的Dropout层,为每个神经元结点设置一个随机消除的概率,对于保留下来的神经元,我们得到一个节点较少,规模较小的网络进行训练. 标准网络和dro ...
- mac date
格式化UTC为可读格式 mbp:~ gavin$ date -r 1546848158 2019年 1月 7日 星期一 16时02分38秒 CST 获取当前 UTC mbp:~ gavin$ date ...
- svn加锁设置
SVN 的锁定与解锁 简单的说,如果压根没有锁lock,那么每个人都拥有一个本地copy,每个人都能自由地对本地copy编辑edit并提交commit,这样可能会导致冲突conflict,最后不得不合 ...
- 在caffe中执行脚本文件时 报错:-bash: ./train.sh: Permission denied
报错原因:没有权限 解决方法:chmod 777 train.sh获得权限
- caffe中的caffemodel参数提取方法
需要的文件为:deploy.prototxt caffemodel net = caffe.Net(deploy.txt,caffe_model,caffe.TEST)具体代码: import caf ...
- Day9 面向对象高级
一.方法 方法包括:普通方法.静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同. 普通方法:由对象调用:至少一个self参数:执行普通方法时,自动将调用该方法的对象赋值给self: ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
https://blog.csdn.net/zouxy09/article/details/9993371 自己平时看了一些论文,但老感觉看完过后就会慢慢的淡忘,某一天重新拾起来的时候又好像没有看过一 ...
- Math对象属性
2018-11-28 11:18:46
- Python - 4. Control Structures
From:http://interactivepython.org/courselib/static/pythonds/Introduction/ControlStructures.html Cont ...