离线后倒过来做,这样就跟魔法森林差不多了,缩边为点就可以统计边的权值了。

1A真是爽,可惜常数炸上了天,这是滥用stl容器和无脑link,cut的后果

#include<map>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 100003;
const int M = 1000003;
void read(int &k) {
k = 0; int fh = 1; char c = getchar();
for(; c < '0' || c > '9'; c = getchar())
if (c == '-') fh = -1;
for(; c >= '0' && c <= '9'; c = getchar())
k = (k << 1) + (k << 3) + c - '0';
k = k * fh;
} struct node *null;
struct node {
node *ch[2], *fa;
int mx, mxid, d, id;
short rev;
bool pl() {return fa->ch[1] == this;}
bool check() {return fa == null || (fa->ch[0] != this && fa->ch[1] != this);}
void push() {if (rev) {rev = 0; swap(ch[0], ch[1]); ch[0]->rev ^= 1; ch[1]->rev ^= 1;}}
void count() {
mxid = id; mx = d;
if (ch[0]->mx > mx) {mx = ch[0]->mx; mxid = ch[0]->mxid;}
if (ch[1]->mx > mx) {mx = ch[1]->mx; mxid = ch[1]->mxid;}
}
void setc(node *r, bool c) {ch[c] = r; r->fa = this;}
} pool[N + M]; struct Quee{int op, u, v;} Q[N];
struct Data{int u, v, e;} E[M];
struct maa{
int u, v;
bool operator < (const maa data) const
{return u == data.u ? v < data.v : u < data.u;}
};
bool cmp(Data A, Data B) {return A.e < B.e;}
map <maa, int> ma;
bool cannot[M];
namespace LCT {
int fa[N];
int find(int x) {return fa[x] == x ? x : (fa[x] = find(fa[x]));}
void rotate(node *r) {
node *f = r->fa;
bool c = r->pl();
if (f->check()) r->fa = f->fa;
else f->fa->setc(r, f->pl());
f->setc(r->ch[!c], c);
r->setc(f, !c);
f->count();
}
void update(node *r) {if (!r->check()) update(r->fa); r->push();}
void splay(node *r) {
update(r);
for(; !r->check(); rotate(r))
if (!r->fa->check()) rotate(r->pl() == r->fa->pl() ? r->fa : r);
r->count();
}
node *access(node *r) {node *y = null; for(; r != null; y = r, r = r->fa) splay(r), r->ch[1] = y; return y;}
void changert(node *r) {access(r)->rev ^= 1; splay(r);}
void link(node *r, node *t) {changert(r); r->fa = t;}
void cut(node *r, node *t) {changert(r); access(t); splay(t); t->ch[0]->fa = null; t->ch[0] = null;}
node *findrt(node *r) {access(r); splay(r); while (r->ch[0] != null) r = r->ch[0]; return r;} void newnode(int k, int num) {
pool[k].ch[0] = pool[k].ch[1] = pool[k].fa = null;
pool[k].id = pool[k].mxid = k; pool[k].d = pool[k].mx = num; pool[k].rev = 0;
}
int A[N];
void Build(int n, int m, int q) {
null = &pool[0];
null->ch[0] = null->ch[1] = null->fa = null;
null->id = null->d = null->mx = null->mxid = null->rev = 0;
int u, v, e;
for(int i = 1; i <= n; ++i) newnode(i, 0);
for(int i = 1; i <= m; ++i) {
read(u); read(v); read(e);
if (u > v) swap(u, v);
E[i] = (Data) {u, v, e};
}
sort(E + 1, E + m + 1, cmp);
for(int i = 1; i <= m; ++i) {
ma[(maa) {E[i].u, E[i].v}] = i;
newnode(i + n, E[i].e);
}
for(int i = 1; i <= q; ++i) {
read(Q[i].op); read(Q[i].u); read(Q[i].v);
if (Q[i].u > Q[i].v) swap(Q[i].u, Q[i].v);
if (Q[i].op == 2) cannot[ma[(maa) {Q[i].u, Q[i].v}]] = 1;
}
node *tox, *toy, *toe;
int cnt = 0, x, y, fx, fy;
for(int i = 1; i <= n; ++i) fa[i] = i;
for(int i = 1; i <= m; ++i) {
x = E[i].u; y = E[i].v;
fx = find(x); fy = find(y);
if (fx != fy && !cannot[e = ma[(maa) {x, y}]]) {
++cnt;
fa[fx] = fy;
tox = &pool[x]; toy = &pool[y]; toe = &pool[e + n];
link(tox, toe); link(toy, toe);
if (cnt == n - 1) break;
}
}
cnt = 0;
for(int i = q; i >= 1; --i) {
if (Q[i].op == 1) {
tox = &pool[Q[i].u]; toy = &pool[Q[i].v];
changert(tox); access(toy); splay(toy);
A[++cnt] = toy->mx;
} else {
tox = &pool[Q[i].u]; toy = &pool[Q[i].v];
e = ma[(maa) {Q[i].u, Q[i].v}];
changert(tox); access(toy); splay(toy);
if (E[e].e < toy->mx) {
u = toy->mxid - n;
tox = &pool[E[u].u]; toy = &pool[E[u].v]; toe = &pool[u + n];
cut(tox, toe); cut(toy, toe);
tox = &pool[Q[i].u]; toy = &pool[Q[i].v]; toe = &pool[e + n];
link(tox, toe); link(toy, toe);
}
}
}
for(int i = cnt; i; --i) printf("%d\n", A[i]);
}
} int n, m, q;
int main() {
read(n); read(m); read(q);
LCT::Build(n, m, q);
return 0;
}

模板一定不能写残啊,想起一个月前Round1Day1调LCT的模板调了4h,查出各种手残的错误QAQ然而并没有什么用。

【BZOJ 2594】【WC 2006】水管局长数据加强版的更多相关文章

  1. [WC 2006]水管局长数据加强版

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

  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. BZOJ 2594: [Wc2006]水管局长数据加强版 [LCT kruskal]

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

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

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

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

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

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

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

  8. 数据结构(动态树):COGS 27. [WC 2006] 水管局长

    27. [WC 2006] 水管局长 ★★★☆   输入文件:tube.in   输出文件:tube.out   简单对比时间限制:3 s   内存限制:128 MB [问题描述 ] SC 省 MY ...

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

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

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

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

随机推荐

  1. 谈谈 Google 的 Test Certified

    转载请联系作者,谢谢! 本文简单介绍下Google的Test Certified. Test Certified(后文简称TC)是Google内部的一个认证项目,在8年的时间里取得了多个里程碑,有17 ...

  2. WinCE及Windows软件开发相关书籍转让

    从开始做WinCE开发到现在已经十多年了,最初可以学习和参考的资料并不多,那时候还没有Stack Overflow,Google也还可以正常访问.遇到问题时,一般都在Google Groups的mic ...

  3. AC日记——计算2的N次方 openjudge 1.6 12

    12:计算2的N次方 总时间限制:  1000ms 内存限制:  65536kB 描述 任意给定一个正整数N(N<=100),计算2的n次方的值. 输入 输入一个正整数N. 输出 输出2的N次方 ...

  4. 维护MMO项目的随想

    前提条件 近期我的工作内容是在维护一个历经几年的MMORPG大型项目,写下自己的一些感想 项目进度:游戏中基本的系统功能都有了,现阶段的主要工作就是修复系统的bug及重构部分系统. 维护老项目从何开始 ...

  5. JMeter学习(四)参数化

    JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户 ...

  6. Android驱动入门-LED--测试APP编写③

    硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-24  10:47:03 在Android Studio中 ...

  7. Centos 检查磁盘读写性能

    启动Tomcat发现deploy war的速度明显变慢, 怀疑磁盘出问题 测试写入 [tomcat@localhost ~]$ dd if=/dev/zero of=kwxgd bs=64k coun ...

  8. PAT 1013. 数素数 (20)

    令Pi表示第i个素数.现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数. 输入格式: 输入在一行中给出M和N,其间以空格分隔. 输出格式: 输出从PM到PN的所有素数 ...

  9. Method not found: '!!0[] System.Array.Empty()'.

    错误原因:程序里面没有可调用的方法(程序使用的是 .NET Framework 4.6,但是你自己的系统里面使用的不是 4.6版本) 解决方法:1.安装window sp1  ,下载地址是:https ...

  10. tomcat 新手上路

    前提:本机先安装好JDK,保证常规java环境已经具备 1.下载Tomcat 7.0现在官网上好象已经没有安装程序版了,只有免解压zip版本(现在最新的版本是7.0.42) 下载地址 http://t ...