zjoi网络
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网络的更多相关文章
- zjoi 网络
题解: 很显然会发现对于每种颜色分开处理这是一颗树 然后就是裸的lct 有个坑就是判断操作1 可能颜色改成跟原先一样的 代码: #include <bits/stdc++.h> using ...
- [ ZJOI 2010 ] 网络扩容
\(\\\) Description 给定一张有向图,每条边都有一个容量 \(C\) 和一个扩容费用 \(W\). 这里扩容费用是指将容量扩大 \(1\) 所需的费用.求: 在不扩容的情况下, \(1 ...
- [ZJOI 2012] 网络
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2816 [算法] 对每种颜色的边建一棵LCT , 维护联通性即可 时间复杂度 : O( ...
- BZOJ-1834 网络扩容 最小费用最大流+最大流+乱搞
1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec Memory Limit: 64 MB Submit: 2269 Solved: 1136 [Submit ...
- ZJOI 2019 划水记
作为一个极其蒟蒻的OIer,虽然没有省选资格但还是去见见世面. ZJOI2019一试是在浙江省镇海中学.听名字就很霸气. 学习OI的最后一年,记录下一些事情,即使最终走到最后也一无所获,也是一段美好的 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- Android请求网络共通类——Hi_博客 Android App 开发笔记
今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...
- 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法
如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...
- Virtual Box配置CentOS7网络(图文教程)
之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...
随机推荐
- OpenLayer3调用天地图示例
最近,工作中有需要用Openlayer3脚本库调用天地图的wmts服务接口,由于这两个都是刚开始接触,所以是摸着石头过河,遇到了地图显示不了的问题,虽然官网http://www.zjditu.cn/r ...
- IOS中DES与MD5加密方案
0 2 项目中用的的加密算法,因为要和安卓版的适配,中间遇到许多麻烦. MD5算法和DES算法是常见的两种加密算法. MD5:MD5是一种不可逆的加密算法,按我的理解,所谓不可逆,就是不能解密,那 ...
- 一个 rsync同步文件脚本
#/bin/bash cd /root/phone echo "update guanwang phone version" git pull ]; then echo " ...
- 8、flask之flask-script组件
Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...
- 解决CXF的java.io.FileNotFoundException: class path resource [META-INF/cxf/cxf-extension-soap.xml] cannot be opened because it does not exist
以下是错误信息 九月 25, 2017 8:22:04 下午 org.springframework.web.context.support.XmlWebApplicationContext prep ...
- CentOS 设置网络(修改IP&修改网关&修改DNS)
CentOS修改IP地址 # ifconfig eth0 192.168.1.80 这样就把IP地址修改为192.168.1.80(如果发现上不了网了,那么你可能需要把网关和DNS也改一下,后面会提到 ...
- php常用面试知识点
1.php基础 2.mysql基础 3.js基础 4.jq 5.正则 6.面向对象 7.分页类,购物车类,数据库类,上传类,图片处理类 8.smarty模板技术(以及自己写模板引擎) 9.ajax 1 ...
- C/C++语言简介之程序结构
C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数.因此, ...
- LNK2026 模块对于 SAFESEH 映像是不安全的
解决方法如下: 配置属性 -> 链接器 -> 命令行 位置添加如下内容: /SAFESEH:NO
- CentOS下iptables持久化
iptables规则持久化 设定防火墙规则 iptables -A INPUT -s 1.1.1.1/32 -p tcp -m tcp --dport 22 -j DROP iptables -A I ...