倒过来就变成了加边
然后就直接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水管局长(加强)的更多相关文章

  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. P4172 [WC2006]水管局长(LCT)

    P4172 [WC2006]水管局长 LCT维护最小生成树,边权化点权.类似 P2387 [NOI2014]魔法森林(LCT) 离线存储询问,倒序处理,删边改加边. #include<iostr ...

  8. P4172 [WC2006]水管局长

    P4172 [WC2006]水管局长 前言 luogu数据太小 去bzoj,他的数据大一些 思路 正着删不好维护 那就倒着加,没了 LCT维护他的最小生成树MST 树上加一条边肯定会有一个环 看看环上 ...

  9. [BZOJ2594][WC2006]水管局长加强版(LCT+Kruskal)

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

  10. [BZOJ2594] [WC2006]水管局长(Kruskal+LCT)

    [BZOJ2594] [WC2006]水管局长(Kruskal+LCT) 题面 SC省MY市有着庞大的地下水管网络,嘟嘟是MY市的水管局长(就是管水管的啦),嘟嘟作为水管局长的工作就是:每天供水公司可 ...

随机推荐

  1. 克隆虚拟机以及两台linux机器相互登录:linux学习第四篇

    克隆虚拟机 1.      克隆 之后自己命名克隆的虚拟机并自己选择存放位置,完成克隆 2.      克隆虚拟机之后对新的虚拟机修改网络配置,以免冲突(将配置文件里的UUID去掉,并修改IP地址) ...

  2. 购物车【JavaWeb小项目、简单版】

    前言 为了巩固MVC的开发模式,下面就写一个购物车的小案例.. ①构建开发环境 导入需要用到的开发包 建立程序开发包 ②设计实体 书籍实体 public class Book { private St ...

  3. Git团队协作之GitFlow & SoucceTree

    GitFlow 定义了一个围绕项目发布的严格的分支模型,仍然使用中央仓库作为开发者的交互中心 GitFlow分支 Master分支 Hotfix紧急修改 Release分支 Develop开发分支 F ...

  4. git 版本控制的简单应用

    一.通过 honebrew 安装git , 教程参考:http://brew.sh/index_zh-cn.html 也可对比参考:http://book.51cto.com/art/201107/2 ...

  5. 织梦去除tag标签url中的问号

    找到文件 include\taglib\tag.lib.php  大概87行 把 $row['link'] = $cfg_cmsurl."/tags.php?/".urlencod ...

  6. 微信小程序Md5加密(utf-8汉字无影响)

    微信小程序不让使用第三方jqMD5 只好改原生js咯 废话不多说直接贴代码 其实就是将原生function调用改为 module.exports = md5; 文中 红色标注 使用方法 将md5.js ...

  7. Git 上传 GitHub

    1.下载 2.安装 3.功能识别 3-1.查看git版本  git  --version 3-2.移除原来的版本 yum  remove git 4.配置 4-1.用户配置信息 git config ...

  8. 35 个 jQuery 小技巧

    1. 禁止右键点击 $(document).ready(function(){ $(document).bind("contextmenu",function(e){ return ...

  9. 关于eclipse安装springide的记录

    近些天,又开始学习springmvc,使用eclipse进行开发,由于很多快捷键时候需要安装springide插件才能出来,我遇到配置DispatcherServlet,结果alt+/出不来Dispa ...

  10. Egret学习笔记 (Egret打飞机-2.开始游戏)

    打开 Egret Wing,新建一个Egret游戏项目,然后删掉默认生成的createGameScene方法里面的东西 然后新建一个BeginScene.ts的文件,作为我们的游戏的第一个场景 cla ...