Description:

SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一条从A至B的水管的路径,接着通过信息化的控制中心通知路径上的水管进入准备送水状态,等到路径上每一条水管都准备好了,供水公司就可以开始送水了。嘟嘟一次只能处理一项送水任务,等到当前的送水任务完成了,才能处理下一项。
在处理每项送水任务之前,路径上的水管都要进行一系列的准备操作,如清洗、消毒等等。嘟嘟在控制中心一声令下,这些水管的准备操作同时开始,但由于各条管道的长度、内径不同,进行准备操作需要的时间可能不同。供水公司总是希望嘟嘟能找到这样一条送水路径,路径上的所有管道全都准备就绪所需要的时间尽量短。嘟嘟希望你能帮助他完成这样的一个选择路径的系统,以满足供水公司的要求。另外,由于MY市的水管年代久远,一些水管会不时出现故障导致不能使用,你的程序必须考虑到这一点。
不妨将MY市的水管网络看作一幅简单无向图(即没有自环或重边):水管是图中的边,水管的连接处为图中的结点。

 
仍然没能自己想出来,LCT题果然都不一般。
做过的第三个时光倒流题,都没有想到,而且还一个题解都没有写,有必要积累一下思路。
 
时光倒流就是当某一种正向的操作不好进行时(往往是可插入不可删除的数据结构的删除操作)
倒序读入,倒序处理询问,使删除变成插入操作的技巧。
 
以本题为例,我们要维护的是最小生成树,过程当中会删除一些边。
我们会发现无法在可以接受的复杂度内找到一条边的替代品,删除操作的复杂度没有保证。
 
那么我们考虑时光倒流,先处理最后一个询问,这时候所有的被删的边都不在最小生成树里。
所以我们对询问里没有出现的边跑一个最小生成树就是答案。
然而删边操作就变成了把被删的边加回来,就是解锁,或者说加入一条边。
加入的话就好说了,我们只要查询一下在目前的生成树里两个端点之间的最大边权。
如果查询结果比加入的边权大,那么就在生成树里删除那条最没用的边,把新的这条边加入即可。
否则这条新边就是没用的,无需操作。
 
具体实现的话:连边,加边,查链上最大边权及对应的编号。
用lct实现就行。细节还有拿hash_map映射边啊什么的就比较简单了。
 #include<cstdio>
#include<queue>
using namespace std;
#define lc c[p][0]
#define rc c[p][1]
int f[],c[][],n,m,q,lz[],mx[],mxp[],v[];
int sta[],A[],B[],V[],opt[],x[],y[];
int lck[],ans[];
struct hashmap{
#define mod 2000003
int fir[],l[],x[],y[],v[],cnt;
int &operator[](pair<int,int>p){
int xx=p.first,yy=p.second;
if(xx<yy)xx^=yy^=xx^=yy;
long long hsh=(xx*19733737ll+yy)%mod;
for(int i=fir[hsh];i;i=l[i])if(x[i]==xx&&y[i]==yy)return v[i];
l[++cnt]=fir[hsh];fir[hsh]=cnt;x[cnt]=xx;y[cnt]=yy;return v[cnt];
}
}mm;
void read(int &p,register char ch=getchar()){
while(ch>''||ch<'')ch=getchar();
while(ch<=''&&ch>='')p=(p<<)+(p<<)+ch-,ch=getchar();
}
bool not_root(int p){return c[f[p]][]==p||c[f[p]][]==p;}
void rev(int p){lc^=rc^=lc^=rc,lz[p]^=;}
void up(int p){
if(mx[lc]>mx[rc])mx[p]=mx[lc],mxp[p]=mxp[lc];
else mx[p]=mx[rc],mxp[p]=mxp[rc];
if(v[p]>mx[p])mx[p]=v[p],mxp[p]=p;
}
void down(int p){if(lz[p])rev(lc),rev(rc),lz[p]=;}
void rotate(int p){
int fa=f[p],gr=f[fa],k=c[fa][]==p,br=c[p][!k];
if(not_root(fa))c[gr][c[gr][]==fa]=p; c[p][!k]=fa; c[fa][k]=br;
f[p]=gr; f[fa]=p; f[br]=fa; up(fa);
}
void splay(int p){
int res=p,top=;sta[++top]=p;
while(not_root(res))sta[++top]=res=f[res];
while(top)down(sta[top--]);
while(not_root(p)){
int fa=f[p],gr=f[fa];
if(not_root(fa))rotate((c[fa][]==p)^(c[gr][]==fa)?fa:p);
rotate(p);
}
up(p);
}
void access(int p){for(int y=;p;p=f[y=p])splay(p),rc=y,up(p);}
void make_root(int p){access(p);splay(p);rev(p);}
void split(int x,int y){make_root(x);access(y);splay(y);}
void link(int x,int y){make_root(x);f[x]=y;up(y);}
void cut(int x,int y){split(x,y);f[x]=c[y][]=;up(y);}
struct edge{
int a,b,l,num;
friend bool operator<(edge a,edge b){return a.l>b.l;}
}e[];
priority_queue<edge>qu;
int fa[];
int find(int k){return fa[k]==k?k:fa[k]=find(fa[k]);}
void Kruscal(){
for(int i=;i<=n;++i)fa[i]=i;
for(int i=;i<=m;++i)if(!lck[n+i])qu.push((edge){A[i],B[i],V[i],n+i});
while(!qu.empty()){
int a=qu.top().a,b=qu.top().b,v=qu.top().l,num=qu.top().num;qu.pop();
if(find(a)!=find(b))fa[fa[a]]=fa[b],link(a,num),link(num,b);
}
}
int main(){
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=m;++i)read(A[i]),read(B[i]),read(V[i]),mm[make_pair(A[i],B[i])]=n+i,v[n+i]=V[i];
for(int i=;i<=q;++i)read(opt[i]),read(x[i]),read(y[i]),opt[i]--;
for(int i=;i<=q;++i)if(opt[i])lck[mm[make_pair(x[i],y[i])]]=;
Kruscal();
for(int i=q;i;--i)
if(opt[i]){
split(x[i],y[i]);int nmx=mx[y[i]],tbc=mxp[y[i]],obj=mm[make_pair(x[i],y[i])];
if(nmx<=V[obj-n])continue;
cut(tbc,A[tbc-n]);cut(tbc,B[tbc-n]);
link(obj,x[i]);link(obj,y[i]);
}else split(x[i],y[i]),ans[i]=mx[y[i]];
for(int i=;i<=q;++i)if(!opt[i])printf("%d\n",ans[i]);
}

水管局长数据加强版:lct,时光倒流,最小生成树,边化点的更多相关文章

  1. BZOJ 2594: [Wc2006]水管局长数据加强版 [LCT kruskal]

    2594: [Wc2006]水管局长数据加强版 Time Limit: 25 Sec  Memory Limit: 128 MBSubmit: 2917  Solved: 918[Submit][St ...

  2. [bzoj2594][Wc2006]水管局长数据加强版 (lct)

    论蒟蒻的自我修养T_T.. 和noi2014魔法森林基本一样...然而数据范围大得sxbk...UPD:这题如果用lct判联通的话可能会被卡到O(mlogm)..所以最好还是用并查集吧 一开始数组开太 ...

  3. BZOJ 2594: [Wc2006]水管局长数据加强版( LCT )

    离线然后就是维护加边的动态MST, Link cut tree秒掉..不过我写+调了好久...时间复杂度O(NlogN + MlogM) ------------------------------- ...

  4. BZOJ 2594: [Wc2006]水管局长数据加强版 (LCT维护最小生成树)

    离线做,把删边转化为加边,那么如果加边的两个点不连通,直接连就行了.如果联通就找他们之间的瓶颈边,判断一下当前边是否更优,如果更优就cut掉瓶颈边,加上当前边. 那怎么维护瓶颈边呢?把边也看做点,向两 ...

  5. BZOJ2594 [Wc2006]水管局长数据加强版 LCT kruskal

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2594 题意概括 N个点的图,M条带权边.(N<=100000,M<=1000000) ...

  6. [bzoj2594][Wc2006]水管局长数据加强版——lct+离线

    Brief Description 您有一个无向带权图,您需要支持两种操作. 询问两个点之间的最大权最小路径. 删除一条边. Algorithm Design 我们首先提出一个猜想:最优路径一定在原图 ...

  7. bzoj2594 [Wc2006]水管局长数据加强版——LCT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2594 时间倒序一下,就是 魔法森林 那道题: 有个不解的地方,是 access 里面关于 p ...

  8. BZOJ 2594 【WC2006】 水管局长数据加强版

    题目链接:水管局长数据加强版 好久没写博客了…… 上次考试的时候写了一发LCT,但是写挂了……突然意识到我已经很久没有写过LCT了,于是今天找了道题来练练手. 首先,LCT这里不讲.这道题要求支持动态 ...

  9. BZOJ2594: [Wc2006]水管局长数据加强版

    题解: 裸LCT+离线+二分+MST... 代码:(几乎摘抄自hzwer) #include<cstdio> #include<cstdlib> #include<cma ...

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

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

随机推荐

  1. Docker4-docker私库的搭建及常用方法-docker-registry方式

    一.简单介绍 前面已经介绍,可以使用Docker Hub公共仓库,但是大多数情况企业都需要创建一个本地仓库供自己使用.这里介绍几种搭建私库的方法 私库的好处有几点 1.节约带宽 2.可以自己定制系统 ...

  2. 实验室工作站jupyterhub安装笔记

    本篇文章为实验室工作站的jupyterhub安装配置笔记,由于软硬件等各种区别,安装过程难免有所区别,仅供大家参考. 实验室新到一台深度学习工作站,原本想装一个juoyter notebook直接开干 ...

  3. UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 357: illegal multibyte sequence 错误解决方法(已解决)

    今天在搭建数据驱动测试框架的时候遇到这个错误: 好在我英语水平还不错(也就六级水平吧),根据英文提示说是多字节数据顺序是非法的 顺着错误往上找发现 File "C:\Users\Mr雷的电脑 ...

  4. python程序编译成exe文件

    最近越来越喜欢使用python写工具.使用的时候,发现程序内部成员python安装目录常常不同,如果用bat双击执行,常常需要修改从svn上down下来的bat文件中python.exe的路径.而给策 ...

  5. ES三节点重启后报错no known master node

    问题 一直在研究ES的监控怎么做,想偷点懒,不去通过API获取然后计算,就想找个现成的插件或者监控软件,只要装个agent就可以,然后就找到了x-pack,插件装好了之后,需要重启ES集群,线上的ES ...

  6. NOIP_TG

    本博客主要记录一些在刷题的途中遇到的一些巧妙的题目 砝码称重 一开始想到可以DP递推标记能凑成的数量 但发现同一种砝码可能有多个于是想多开一维状态存当前还剩多少砝码 真是愚蠢至极 直接把所有砝码单独看 ...

  7. Web渗透之mssql LOG备份getshell

    log备份的总结 当SQL注入是得到DB权限时候,接下来可以做的工作很多,象找管理员密码,后台管理这些都可以帮助你拿到WEBSHELL,但是这篇文章讲的是log备份,LOG备份出来的小马的体积小,而且 ...

  8. Express框架的整体感知

    Express是基于node.js平台的快速.开放.极简的web开放框架,它的地位与作用有点类似于前端的jquery框架.它的英文官网地址为 http://expressjs.com,其对应的中文官网 ...

  9. [JZOJ100047] 【NOIP2017提高A组模拟7.14】基因变异

    Description 21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的 ...

  10. Cocos2d-x 学习笔记(11.4) ScaleTo ScaleBy

    1. ScaleTo ScaleBy 对node进行缩放.ScaleBy是ScaleTo的子类. 1.1 成员变量 create方法 ScaleTo ScaleBy 成员变量一样: float _sc ...