WC2006水管局长(加强)
倒过来就变成了加边
然后就直接LCT
# include <stdio.h>
# include <stdlib.h>
# include <iostream>
# include <algorithm>
# include <string.h>
# define IL inline
# define RG register
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
IL ll Read(){
RG char c = getchar(); RG ll x = 0, z = 1;
for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + c - '0';
return x * z;
}
const int MAXN(1020000);
int n, m, Q, S[MAXN], ch[2][MAXN], fa[MAXN], mx[MAXN], rev[MAXN];
int w[MAXN], from[MAXN], to[MAXN], id1[MAXN], vis[MAXN];
int qx[MAXN], qy[MAXN], qk[MAXN], ans[MAXN], id2[MAXN], mark[MAXN];
IL bool Son(RG int x){ return ch[1][fa[x]] == x; }
IL bool Isroot(RG int x){ return ch[0][fa[x]] != x && ch[1][fa[x]] != x; }
IL void Update(RG int x){
mx[x] = x;
if(w[mx[ch[0][x]]] > w[mx[x]]) mx[x] = mx[ch[0][x]];
if(w[mx[ch[1][x]]] > w[mx[x]]) mx[x] = mx[ch[1][x]];
}
IL void Pushdown(RG int x){ if(!rev[x]) return; rev[x] = 0; rev[ch[0][x]] ^= 1; rev[ch[1][x]] ^= 1; swap(ch[0][x], ch[1][x]); }
IL void Rot(RG int x){
RG int y = fa[x], z = fa[y], c = Son(x);
if(!Isroot(y)) ch[Son(y)][z] = x; fa[x] = z;
ch[c][y] = ch[!c][x]; fa[ch[c][y]] = y;
ch[!c][x] = y; fa[y] = x; Update(y);
}
IL void Splay(RG int x){
RG int top = 0; S[++top] = x;
for(RG int y = x; !Isroot(y); y = fa[y]) S[++top] = fa[y];
while(top) Pushdown(S[top--]);
for(RG int y = fa[x]; !Isroot(x); Rot(x), y = fa[x])
if(!Isroot(y)) Son(x) ^ Son(y) ? Rot(x) : Rot(y);
Update(x);
}
IL void Access(RG int x){ for(RG int y = 0; x; y = x, x = fa[x]) Splay(x), ch[1][x] = y, Update(x); }
IL void Makeroot(RG int x){ Access(x); Splay(x); rev[x] ^= 1; }
IL int Findroot(RG int x){ Access(x); Splay(x); while(ch[0][x]) x = ch[0][x]; return x; }
IL void Split(RG int x, RG int y){ Makeroot(x); Access(y); Splay(y); }
IL void Link(RG int x, RG int y){ Makeroot(x); fa[x] = y; }
IL void Cut(RG int x, RG int y){ Split(x, y); fa[x] = ch[0][y] = 0; }
IL bool Cmp1(RG int x, RG int y){ return from[x] != from[y] ? from[x] < from[y] : to[x] < to[y]; }
IL bool Cmp2(RG int x, RG int y){ return w[x] < w[y]; }
IL bool Cmp3(RG int x, RG int y){ return qx[x] != qx[y] ? qx[x] < qx[y] : qy[x] < qy[y]; }
int main(RG int argc, RG char* argv[]){
n = Read(); m = Read(); Q = Read();
for(RG int i = 1; i <= m; i++){
from[i] = Read() + m, to[i] = Read() + m, w[i] = Read(), id1[i] = i;
if(from[i] > to[i]) swap(from[i], to[i]);
}
sort(id1 + 1, id1 + m + 1, Cmp1);
for(RG int i = 1; i <= Q; i++){
qk[i] = Read(); qx[i] = Read() + m; qy[i] = Read() + m; id2[i] = i;
if(qx[i] > qy[i]) swap(qx[i], qy[i]);
}
sort(id2 + 1, id2 + Q + 1, Cmp3);
for(RG int i = 1, l = 1; i <= Q && l <= m; i++){
if(qk[id2[i]] == 1) continue;
while(l <= m && (qx[id2[i]] > from[id1[l]] || (qx[id2[i]] == from[id1[l]] && qy[id2[i]] > to[id1[l]]))) l++;
if(l > m) break;
if(qx[id2[i]] == from[id1[l]] && qy[id2[i]] == to[id1[l]]) vis[id1[l]] = 1, mark[id2[i]] = id1[l];
}
sort(id1 + 1, id1 + m + 1, Cmp2);
for(RG int i = 1, t = 0; i <= m; i++){
if(vis[id1[i]]) continue;
if(Findroot(from[id1[i]]) == Findroot(to[id1[i]])) continue;
Link(from[id1[i]], id1[i]); Link(to[id1[i]], id1[i]);
t++; if(t == n - 1) break;
}
for(RG int i = Q; i >= 1; i--){
if(qk[i] == 1) Split(qx[i], qy[i]), ans[i] = w[mx[qy[i]]];
else{
RG int x = from[mark[i]], y = to[mark[i]];
if(Findroot(x) != Findroot(y)) Link(x, mark[i]), Link(y, mark[i]);
else{
Split(x, y);
RG int ma = mx[y], xx = from[ma], yy = to[ma];
if(w[ma] > w[mark[i]]) Cut(xx, ma), Cut(yy, ma), Link(x, mark[i]), Link(y, mark[i]);
}
}
}
for(RG int i = 1; i <= Q; i++)
if(qk[i] == 1) printf("%d\n", ans[i]);
return 0;
}
WC2006水管局长(加强)的更多相关文章
- BZOJ2594: [Wc2006]水管局长数据加强版
题解: 裸LCT+离线+二分+MST... 代码:(几乎摘抄自hzwer) #include<cstdio> #include<cstdlib> #include<cma ...
- bzoj 2594: [Wc2006]水管局长数据加强版 动态树
2594: [Wc2006]水管局长数据加强版 Time Limit: 25 Sec Memory Limit: 128 MBSubmit: 934 Solved: 291[Submit][Sta ...
- BZOJ 2594: [Wc2006]水管局长数据加强版( LCT )
离线然后就是维护加边的动态MST, Link cut tree秒掉..不过我写+调了好久...时间复杂度O(NlogN + MlogM) ------------------------------- ...
- [bzoj2594][Wc2006]水管局长数据加强版 (lct)
论蒟蒻的自我修养T_T.. 和noi2014魔法森林基本一样...然而数据范围大得sxbk...UPD:这题如果用lct判联通的话可能会被卡到O(mlogm)..所以最好还是用并查集吧 一开始数组开太 ...
- BZOJ 2594: [Wc2006]水管局长数据加强版 [LCT kruskal]
2594: [Wc2006]水管局长数据加强版 Time Limit: 25 Sec Memory Limit: 128 MBSubmit: 2917 Solved: 918[Submit][St ...
- BZOJ_2594_[Wc2006]水管局长数据加强版_LCT
BZOJ_2594_[Wc2006]水管局长数据加强版_LCT Description SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供 ...
- P4172 [WC2006]水管局长(LCT)
P4172 [WC2006]水管局长 LCT维护最小生成树,边权化点权.类似 P2387 [NOI2014]魔法森林(LCT) 离线存储询问,倒序处理,删边改加边. #include<iostr ...
- P4172 [WC2006]水管局长
P4172 [WC2006]水管局长 前言 luogu数据太小 去bzoj,他的数据大一些 思路 正着删不好维护 那就倒着加,没了 LCT维护他的最小生成树MST 树上加一条边肯定会有一个环 看看环上 ...
- [BZOJ2594][WC2006]水管局长加强版(LCT+Kruskal)
2594: [Wc2006]水管局长数据加强版 Time Limit: 25 Sec Memory Limit: 128 MBSubmit: 4452 Solved: 1385[Submit][S ...
- [BZOJ2594] [WC2006]水管局长(Kruskal+LCT)
[BZOJ2594] [WC2006]水管局长(Kruskal+LCT) 题面 SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可 ...
随机推荐
- 模板方法模式和JDBCTemplate(一)
本篇博客的目录: 一:模板方法模式介绍 二:模板方法模式的简单实现 三:总结 一:模板方法模式的介绍 1.1:模板方法模式的定义 定义:一个操作中的算法的骨架,而将一些步骤延迟到子类中.Templat ...
- 织梦去除tag标签url中的问号
找到文件 include\taglib\tag.lib.php 大概87行 把 $row['link'] = $cfg_cmsurl."/tags.php?/".urlencod ...
- php会话(session)实现原理
先考虑如下问题: 禁用了cookie,session能否使用? 如何把session存储数据库/memcached/redis 如何实现一个严格的30分钟过期的会话?. 如何实践web服务器集群的会话 ...
- 登录功能(MD5加密)
登录这个功能,是不管哪个项目都会用到的,登录做的好坏,安全性的保障将直接影响到整个系统的成败,尤其是一些安全性要求比较严格的项目 1.首先需要对密码进行加密,这里用到的是md5加密,需要在login. ...
- FFMpeg在Ubuntu上的安装和使用
在Ubuntu Server上编译FFmpeg FFmpeg是最流行的开源视频转码工具包,在Ubuntu上可以直接通过apt-get安装,但是默认的编码器不提供x264这些non-free的编码器,所 ...
- 如何使用supervisor管理你的应用
1.前言 Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是UNIX-like系统下的一个进程管理工具,不支持Windo ...
- aforge 学习-命名空间中文理解
序列 名称 介绍 1 Aforge AForge AForge名称空间的核心名称空间.微软网络框架,其中包含核心类所使用的其他框架的命名空间和类,可以独立用于各种用途. 2 AForge.Cont ...
- CodeForces-747E
这几天好懒,昨天写的题,今天才来写博客.... 这题你不知道它究竟有多少层,但是知道字符串长度不超过10^6,那么它的总容量是被限定的,用一个二维动态数组就OK了.输入字符串后,可以把它按照逗号分割成 ...
- HashMap并发导致死循环 CurrentHashMap
为何出现死循环简要说明 HashMap闭环的详细原因 cocurrentHashMap的底层机制 为何出现死循环简要说明 HashMap是非线程安全的,在并发场景中如果不保持足够的同步,就有可能在执行 ...
- 3.3.2 PCI设备对不可Cache的存储器空间进行DMA读写
在x86处理器和PowerPC处理器中,PCI设备对"不可Cache的存储器空间"进行DMA读写的过程并不相同.其中PowerPC处理器对"不可Cache的存储器空间&q ...