BZOJ卡不过灰常蛋疼(毕竟人蠢自带巨大常数

这和动态维护最小生成树很像,但加边变成了删边,似乎没法做了。

然后根据之前的套路离线做,删边变成加边,就可以做了orz

二分查找的:(慢

// It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<map>
#include<stack>
#define il inline
#define rg register
#define vd void
#define sta static
using namespace std;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=100001;
stack<int>stk;
namespace LCT{
typedef const int& fast;
int ch[maxn*2][2],fa[maxn*2],mx[maxn*2],w[maxn*2],index,A[maxn*2],B[maxn*2];bool rev[maxn*2];
il vd upd(fast x){
mx[x]=x;
if(w[mx[ch[x][0]]]>w[mx[x]])mx[x]=mx[ch[x][0]];
if(w[mx[ch[x][1]]]>w[mx[x]])mx[x]=mx[ch[x][1]];
}
il vd Rev(fast x){if(x)rev[x]^=1,swap(ch[x][0],ch[x][1]);}
il vd down(fast x){if(rev[x])Rev(ch[x][0]),Rev(ch[x][1]),rev[x]=0;}
il bool isrt(fast x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}
il vd rotate(fast x){
sta int y,z,o;y=fa[x],z=fa[y],o=x==ch[y][1];
if(!isrt(y))ch[z][y==ch[z][1]]=x;fa[x]=z;
ch[y][o]=ch[x][!o],fa[ch[x][!o]]=y;
ch[x][!o]=y,fa[y]=x;
upd(y);
}
il vd splay(fast x){
sta int y,z,stk[maxn],top;stk[top=1]=x;
for(rg int i=x;!isrt(i);i=fa[i])stk[++top]=fa[i];
while(top)down(stk[top--]);
for(y=fa[x],z=fa[y];!isrt(x);rotate(x),y=fa[x],z=fa[y])
if(!isrt(y))rotate(((x==ch[y][0])^(y==ch[z][0]))?y:x);
upd(x);
}
il vd access(int x){for(rg int y=0;x;x=fa[y=x])splay(x),ch[x][1]=y,upd(x);}
il vd makert(fast x){access(x),splay(x),Rev(x);}
il vd link(fast x,fast y){makert(x),fa[x]=y;}
il vd cut(fast x,fast y){makert(x),access(y),splay(y);fa[x]=ch[y][0]=0;}
il int Query(fast x,fast y){makert(x),access(y),splay(y);return mx[y];}
il int find(int x){access(x),splay(x);while(ch[x][0])x=ch[x][0];return x;}
il vd Link(fast x,fast y,fast _w){
if(find(x)^find(y)){w[++index]=_w,link(A[index]=x,index),link(B[index]=y,index);return;}
sta int z;z=Query(x,y);
if(_w>=w[z])return;
cut(A[z],z),cut(B[z],z);
w[z]=_w,link(A[z]=x,z),link(B[z]=y,z);
}
};
namespace GGMap{
struct gzy{int x,y,*k;}s[maxn];
il bool cmp(const gzy&a,const gzy&b){return a.x==b.x?a.y<b.y:a.x<b.x;}
int tot=0;
il vd insert(int a,int b,int*c){++tot,s[tot].x=a,s[tot].y=b,s[tot].k=c;}
il vd prepare(){sort(s+1,s+tot+1,cmp);}
il int* find(int a,int b){
rg int l=1,r=tot,mid;
while(l<r){
mid=(l+r)>>1;
if(s[mid].x<a||(s[mid].x==a&&s[mid].y<b))l=mid+1;
else r=mid;
}
if(s[l].x==a&&s[l].y==b)return s[l].k;
else return NULL;
}
}
int opt[maxn],A[maxn],B[maxn],C[maxn];
int X[10000001],Y[10000001],Z[10000001];
int main(){
freopen("tube_strong.in","r",stdin);
freopen("tube_strong.out","w",stdout);
int n=gi(),m=gi(),q=gi();
LCT::index=n;
for(rg int i=1;i<=m;++i){X[i]=gi(),Y[i]=gi(),Z[i]=gi();if(X[i]>Y[i])swap(X[i],Y[i]);}
for(rg int i=1;i<=q;++i){
opt[i]=gi(),A[i]=gi(),B[i]=gi();if(A[i]>B[i])swap(A[i],B[i]);
if(opt[i]==2)GGMap::insert(A[i],B[i],&C[i]);
}
GGMap::prepare();
for(rg int i=1;i<=m;++i){
int *it=GGMap::find(X[i],Y[i]);
if(it==NULL)LCT::Link(X[i],Y[i],Z[i]);
else *it=Z[i];
}
while(q){
if(opt[q]==1)stk.push(LCT::w[LCT::Query(A[q],B[q])]);
else LCT::Link(A[q],B[q],C[q]);
--q;
}
while(!stk.empty())printf("%d\n",stk.top()),stk.pop();
return 0;
}

map+一丁点哈希优化:(较上面快,但还是慢

// It is made by XZZ
#include<cstdio>
#include<algorithm>
#include<map>
#include<stack>
#define il inline
#define rg register
#define vd void
#define sta static
using namespace std;
il int gi(){
rg int x=0,f=1;rg char ch=getchar();
while(ch<'0'||ch>'9')f=ch=='-'?-1:f,ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
const int maxn=100001;
map<pair<int,int>,int>yyb[32768];stack<int>stk;
namespace LCT{
typedef const int& fast;
int ch[maxn*2][2],fa[maxn*2],mx[maxn*2],w[maxn*2],index,A[maxn*2],B[maxn*2];bool rev[maxn*2];
il vd upd(fast x){
mx[x]=x;
if(w[mx[ch[x][0]]]>w[mx[x]])mx[x]=mx[ch[x][0]];
if(w[mx[ch[x][1]]]>w[mx[x]])mx[x]=mx[ch[x][1]];
}
il vd Rev(fast x){if(x)rev[x]^=1,swap(ch[x][0],ch[x][1]);}
il vd down(fast x){if(rev[x])Rev(ch[x][0]),Rev(ch[x][1]),rev[x]=0;}
il bool isrt(fast x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}
il vd rotate(fast x){
sta int y,z,o;y=fa[x],z=fa[y],o=x==ch[y][1];
if(!isrt(y))ch[z][y==ch[z][1]]=x;fa[x]=z;
ch[y][o]=ch[x][!o],fa[ch[x][!o]]=y;
ch[x][!o]=y,fa[y]=x;
upd(y);
}
il vd splay(fast x){
sta int y,z,stk[maxn],top;stk[top=1]=x;
for(rg int i=x;!isrt(i);i=fa[i])stk[++top]=fa[i];
while(top)down(stk[top--]);
for(y=fa[x],z=fa[y];!isrt(x);rotate(x),y=fa[x],z=fa[y])
if(!isrt(y))rotate(((x==ch[y][0])^(y==ch[z][0]))?y:x);
upd(x);
}
il vd access(int x){for(rg int y=0;x;x=fa[y=x])splay(x),ch[x][1]=y,upd(x);}
il vd makert(fast x){access(x),splay(x),Rev(x);}
il vd link(fast x,fast y){makert(x),fa[x]=y;}
il vd cut(fast x,fast y){makert(x),access(y),splay(y);fa[x]=ch[y][0]=0;}
il int Query(fast x,fast y){makert(x),access(y),splay(y);return mx[y];}
il int find(int x){access(x),splay(x);while(ch[x][0])x=ch[x][0];return x;}
il vd Link(fast x,fast y,fast _w){
if(find(x)^find(y)){w[++index]=_w,link(A[index]=x,index),link(B[index]=y,index);return;}
sta int z;z=Query(x,y);
if(_w>=w[z])return;
cut(A[z],z),cut(B[z],z);
w[z]=_w,link(A[z]=x,z),link(B[z]=y,z);
}
};
int opt[maxn],A[maxn],B[maxn],C[maxn];
int X[10000001],Y[10000001],Z[10000001];
int main(){
freopen("tube_strong.in","r",stdin);
freopen("tube_strong.out","w",stdout);
int n=gi(),m=gi(),q=gi(),k;
LCT::index=n;
for(rg int i=1;i<=m;++i){X[i]=gi(),Y[i]=gi(),Z[i]=gi();if(X[i]>Y[i])swap(X[i],Y[i]);}
for(rg int i=1;i<=q;++i){
opt[i]=gi(),A[i]=gi(),B[i]=gi();if(A[i]>B[i])swap(A[i],B[i]);
if(opt[i]==2)yyb[(A[i]+B[i]*23333ll)&32767][make_pair(A[i],B[i])]=-1;
}
for(rg int i=1;i<=m;++i){
sta map<pair<int,int>,int>::iterator it;
k=(X[i]+Y[i]*23333ll)&32767;
it=yyb[k].find(make_pair(X[i],Y[i]));
if(it==yyb[k].end())LCT::Link(X[i],Y[i],Z[i]);
else it->second=Z[i];
}
while(q){
if(opt[q]==1)stk.push(LCT::w[LCT::Query(A[q],B[q])]);
else
LCT::Link(A[q],B[q],yyb[(A[q]+B[q]*23333ll)&32767][make_pair(A[q],B[q])]);
--q;
}
while(!stk.empty())printf("%d\n",stk.top()),stk.pop();
return 0;
}

//orz各位巨犇

cogs1885 [WC2006]水管局长数据加强版的更多相关文章

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

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

  2. bzoj 2594: [Wc2006]水管局长数据加强版 动态树

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

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

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

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

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

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

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

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

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

  7. [WC2006]水管局长数据加强版

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

  8. 【刷题】BZOJ 2594 [Wc2006]水管局长数据加强版

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

  9. 2594. [WC2006]水管局长数据加强版【LCT+最小生成树】

    Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可能要将一定量的水从x处送往y处,嘟嘟需要为供水公司找到一 ...

随机推荐

  1. Loadrunner11代理录制&各个常见功能介绍

    1.代理录制: Lr代理工具:C:\Program Files (x86)\HP\LoadRunner\bin\wplus_init_wsock.exe 1) 设置代理 配置代理信息: 2)设置浏览器 ...

  2. zabbix 监控wind登录状态

    参考博文:http://blog.51cto.com/qicheng0211/1694583 需求:监控win 2008 的用户登录状态,无论用户登录成功与否都要告警(也可以刷选指定用户.指定时间内) ...

  3. Python成员运算符

    Python成员运算符 其他语言没有,是否包含运算符,主要应用在字符串或者集合中 测试实例中包含了一系列的成员,包括字符串,列表或元组. #使用场景01:字符串是否包含另外一个字符串? str01 = ...

  4. [EffectiveC++]item43:学习处理模板化基类内的名称

  5. ZT eoe android4.2 Bluetooth记录01-结构和代码分布

    android4.2 Bluetooth记录01-结构和代码分布 作者:cnhua5更新于 08月21日访问(697)评论(2) 在android4.2中,Google更换了android的蓝牙协议栈 ...

  6. Linux--面试题-01

    1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 i节点 来标识. 4. ...

  7. Alpha 冲刺报告(9/10)

    Alpha 冲刺报告(9/10) 队名:洛基小队 峻雄(组长) 已完成:角色属性功能的测试版 明日计划:准备α版本的ppt 剩余任务:尽量完成角色属性功能 困难:缺乏编程经验,很难自己独立完成编写,只 ...

  8. 4196. [NOI2015]软件包管理器【树链剖分】

    Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...

  9. luogu P2617 Dynamic Rankings(主席树)

    嘟嘟嘟 一句话题意:带修改区间第\(k\)小. 不修改都会,主席树板子.但是有修改就要比较深入的理解主席树了. 众所周知,主席树中以\(i\)为根的线段树维护的是\([1, i]\)这个前缀的权值,因 ...

  10. Jsp实现在线作业提交系统

    Jsp实现在线作业提交系统 作为 Computer Science 的学生,凌晨四点之前睡都应该感到羞耻. 项目托管地址:https://github.com/four-in-the-morning/ ...