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市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可 ...
随机推荐
- CentOS 7 使用iptables防火墙
# 停止firewalld服务 systemctl stop firewalld systemctl mask firewalld # 安装iptables-services yum install ...
- Docker 入门之创建service(一)
在一个分布式应用中,我们把应用的不同层叫做"Services".比如,一个视频共享应用,它包含存储数据到数据库的服务,用户上载后后台进行的视频解码服务,前端服务等等. 然而,一个服 ...
- HDU - 1248 寒冰王座 数学or暴力枚举
思路: 1.暴力枚举每种面值的张数,将可以花光的钱记录下来.每次判断n是否能够用光,能则输出0,不能则向更少金额寻找是否有能够花光的.时间复杂度O(n) 2.350 = 200 + 150,买350的 ...
- hdu1394 分治 or 线段树
利用分治求一次逆序数,然后每次把第一个元素放到末尾,设该交换元素的值为x,设上一次求得的逆序数为y,那么此时的逆序数等于y - x + (n - x - 1),减去x是因为x作为第一个元素,其后共有x ...
- React是什么,为什么要使用它?
React是Facrbook内部的一个JavaScript类库,已于1年开源,可用于创建Web用户交互界面.它引入了一种新的方式来处理浏览器DOM.那些需要手动更新DOM.费力地记录每一个状态的日子一 ...
- 网络基础Cisco路由交换二
三层交换技术 作用: 使用三层交换技术实现VLAN间通信. 三层交换=二层交换+三层转发 基于CEF的快速转发 主要包含两个转发用的信息表: 转发信息库(FIB):FIB类似于路由表,包含路由表中转发 ...
- 硬盘GPT分区与MBR分区的转换
如何将gpt分区更改成mbr分区? "因为笔记本电脑硬盘分区表是GPT而导致大家无法安装引导系统.需要转换为MBR分区还能顺利安装." 问题是,分区工具无法转换MBR,这里小编知道 ...
- Error Code: 1414. OUT or INOUT argument 2 for routine company.new_procedure is not a variable or NEW
1.错误描述 16:27:36 call new_procedure(20150112,1) Error Code: 1414. OUT or INOUT argument 2 for routine ...
- 获取JSON对象的属性值
1.问题背景 有一个json对象,其中有键值对,那怎样获取json对象中属性值 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- 芝麻HTTP: Scrapy小技巧-MySQL存储
这两天上班接手,别人留下来的爬虫发现一个很好玩的 SQL脚本拼接. 只要你的Scrapy Field字段名字和 数据库字段的名字 一样.那么恭喜你你就可以拷贝这段SQL拼接脚本.进行MySQL入库处理 ...