map加LCT水一下就过了

# include <stdio.h>
# include <stdlib.h>
# include <iostream>
# include <algorithm>
# include <string.h>
# include <map>
# 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(10010);
int n, m, C, K, w[MAXN], S[MAXN];
struct Edge{
int u, v;
IL bool operator <(RG Edge B) const{ return u == B.u ? v < B.v : u < B.u; }
};
map <Edge, int> M;
struct Tree{ int ch[2], rev, fa, max, cnt; } t[11][MAXN]; IL bool Son(RG int x){ return t[C][t[C][x].fa].ch[1] == x; } IL bool Isroot(RG int x){ return t[C][t[C][x].fa].ch[0] != x && t[C][t[C][x].fa].ch[1] != x; } IL void Update(RG int x){ t[C][x].max = max(w[x], max(t[C][t[C][x].ch[0]].max, t[C][t[C][x].ch[1]].max)); } IL void Pushdown(RG int x){
if(!t[C][x].rev) return; t[C][x].rev = 0;
swap(t[C][x].ch[0], t[C][x].ch[1]);
t[C][t[C][x].ch[0]].rev ^= 1; t[C][t[C][x].ch[1]].rev ^= 1;
} IL void Rot(RG int x){
RG int y = t[C][x].fa, z = t[C][y].fa, c = Son(x);
if(!Isroot(y)) t[C][z].ch[Son(y)] = x; t[C][x].fa = z;
t[C][y].ch[c] = t[C][x].ch[!c]; t[C][t[C][y].ch[c]].fa = y;
t[C][x].ch[!c] = y; t[C][y].fa = x;
Update(y);
} IL void Splay(RG int x){
RG int top = 0; S[++top] = x;
for(RG int y = x; !Isroot(y); y = t[C][y].fa) S[++top] = t[C][y].fa;
while(top) Pushdown(S[top--]);
for(RG int y = t[C][x].fa; !Isroot(x); Rot(x), y = t[C][x].fa)
if(!Isroot(y)) Son(y) ^ Son(x) ? Rot(x) : Rot(y);
Update(x);
} IL void Access(RG int x){ for(RG int y = 0; x; y = x, x = t[C][x].fa) Splay(x), t[C][x].ch[1] = y, Update(x); } IL int Findroot(RG int x){ Access(x); Splay(x); while(t[C][x].ch[0]) x = t[C][x].ch[0]; return x; } IL void Makeroot(RG int x){ Access(x); Splay(x); t[C][x].rev ^= 1; } IL void Split(RG int x, RG int y){ Makeroot(x); Access(y); Splay(y); } IL void Link(RG int x, RG int y){ t[C][x].cnt++; t[C][y].cnt++; Makeroot(x); t[C][x].fa = y; } IL void Cut(RG int x, RG int y){ Split(x, y); t[C][x].cnt--; t[C][y].cnt--; t[C][x].fa = t[C][y].ch[0] = 0; } IL int Query(RG int x, RG int y){ Split(x, y); return t[C][y].max; } int main(RG int argc, RG char* argv[]){
n = Read(); m = Read(); C = Read(); K = Read(); RG int Col = C;
for(RG int i = 1; i <= n; i++) w[i] = Read();
for(RG int i = 1; i <= m; i++){
RG int u = Read(), v = Read(); C = Read() + 1;
M[(Edge){u, v}] = M[(Edge){v, u}] = C; Link(u, v);
}
while(K--){
RG int opt = Read(), x = Read(), y = Read(), z, zz;
if(!opt){ w[x] = y; for(C = 1; C <= Col; C++) Splay(x); }
else if(opt == 1){
z = Read() + 1; C = zz = M[(Edge){x, y}];
if(!C){ puts("No such edge."); continue; }
if(C == z){ puts("Success."); continue; }
if(t[z][x].cnt > 1 || t[z][y].cnt > 1){ puts("Error 1."); continue; }
C = z; if(Findroot(x) == Findroot(y)){ puts("Error 2."); continue; }
C = zz; Cut(x, y); C = z; Link(x, y); M[(Edge){x, y}] = M[(Edge){y, x}] = C; puts("Success.");
}
else{
C = x + 1; x = Read();
if(Findroot(x) != Findroot(y)) puts("-1");
else printf("%d\n", Query(x, y));
}
}
return 0;
}

zjoi网络的更多相关文章

  1. zjoi 网络

    题解: 很显然会发现对于每种颜色分开处理这是一颗树 然后就是裸的lct 有个坑就是判断操作1 可能颜色改成跟原先一样的 代码: #include <bits/stdc++.h> using ...

  2. [ ZJOI 2010 ] 网络扩容

    \(\\\) Description 给定一张有向图,每条边都有一个容量 \(C\) 和一个扩容费用 \(W\). 这里扩容费用是指将容量扩大 \(1\) 所需的费用.求: 在不扩容的情况下, \(1 ...

  3. [ZJOI 2012] 网络

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2816 [算法] 对每种颜色的边建一棵LCT , 维护联通性即可 时间复杂度 : O( ...

  4. BZOJ-1834 网络扩容 最小费用最大流+最大流+乱搞

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 2269 Solved: 1136 [Submit ...

  5. ZJOI 2019 划水记

    作为一个极其蒟蒻的OIer,虽然没有省选资格但还是去见见世面. ZJOI2019一试是在浙江省镇海中学.听名字就很霸气. 学习OI的最后一年,记录下一些事情,即使最终走到最后也一无所获,也是一段美好的 ...

  6. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  7. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  8. 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法

    如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...

  9. Virtual Box配置CentOS7网络(图文教程)

    之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...

随机推荐

  1. CentOS 7 搭建基于携程Apollo(阿波罗)配置中心单机模式

    Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性.服务端基于Spring Boot ...

  2. 用Markdown写微信公众号文章

    目前微信公众号的编辑器是不支持Markdown语法的,那怎么办呢? 有一款叫Markdown Here的插件可以解决这个问题(支持Chrome.Firefox.Safari). 官方网站:http:/ ...

  3. Jenkins实现PHP的自动部署

    1.汉化jenkins 1).安装汉化包 系统管理 -> 插件管理 -> 安装插件 ->选择插件(Locale plugin) 2).设置语言为中文 系统管理 -> 系统设置 ...

  4. [ZJOI2008]骑士

    [ZJOI2008]骑士 标签: DP 题目链接 题解 把边看成无向的. 其实就是求这个东西的最大独立集. 但是这不是树,怎么求呢? 其实还是一样的求法. 对于每一个连通块.最多有这个联通块的大小数目 ...

  5. ElasticSearch和solr的差别

    Elasticsearch简介 Elasticsearch是一个实时分布式搜索和分析引擎.它让你以前所未有的速度处理大数据成为可能.它用于全文搜索.结构化搜索.分析以及将这三者混合使用:维基百科使用E ...

  6. 依赖于boodtrap3的插件推荐以及bootrap发展前景

    作为一个栅格系统和速度开发的,偏向于框架,bootstrap出来很火,为了节省效率,不少公司选用这个框架进行开发,一同被发现的是依赖于bootrap各种插件的adminLTE的集成模版,但是前端框架日 ...

  7. js的继承实现

    1.原型链继承 1.创建父类对象2.创建子类函数对象3.将父类的实例对象赋值给子类的原型4.将子类的原型属性的构造函数设置为 子类本身 function Person(name) { this.nam ...

  8. Docker容器技术

    Docker介绍 什么是容器 Linux容器是与系统其他部分隔离开的一系列进程,从另一个系统镜像运行,并由该镜像提供支持进程所需的全部文件. 容器镜像包含了应用的所有依赖项,因而在从开发到测试再到生产 ...

  9. nodejs的基础概念

    1.node 安装与相关配置. 2.Node.jsREPL(交互式解释器) 类似于控制台,可以输入命令,并接受系统的响应. REPL 的功能: 1.读取:读取用户输入,解析输入的 js 数据结构,并存 ...

  10. 开发工具类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...