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 ...
随机推荐
- python配置apache的web服务器方法(python的CGI配置)
先大概介绍一下:Python CGI编程 什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运 ...
- linux下利用shell脚本实现添加crontab任务
本来直接用crontab -e 就可以打开vim,输入要执行的任务保存退出就可以添加任务直接启动运行了.但是今天组长说能不能写个shell不用打开vi就能添加到crontab的. 最先想到的是怎么在s ...
- 配置Nginx代理服务器
nginx另一个使用的比较多的情况是作为代理服务器,代理服务器接收请求,然后把请求传递到代理服务器,nginx最后会提取代理服务器的回复,并把这些回复发送给客户端.我们将配置一个基本的代理服务器,图片 ...
- 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
题目:平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小. 源码如下: #include <iostream> #include <string.h> #incl ...
- 架构师入门:搭建基本的Eureka架构(从项目里抽取)
没有废话,直接上干货,理论部分大家可以看其它资料. 这里是部分关键代码,如果需要全部可运行的代码,请给本人留言. 在后继,还将给出搭建高可用Eureka架构的方式. 1 Eureka的框架图 在Eur ...
- 使用canvas编写时间轴插件
使用canvas编写时间轴插件 背景 项目中有一个视频广场的功能,需要一个时间轴类似视频播放中进度条功能一样显示录像情况,并且可以点击.拖动.放大缩小展示时间轴,获取到时间轴的某个时间.原来的时间轴是 ...
- APP性能测试(启动时间)
#encoding:utf-8 import csv import os import time class App(object): def __init__(self): self.content ...
- DQL、DML、DDL、DCL
二. SQL语言的分类 SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句 ...
- Linux下搭建SVN服务器遇到的问题及解决方法,
1.checkout时,提示:URL svn://192.168.1.99/svntest doesn't exist... 奇怪,怎么会提示库不存在呢?肯定是哪里配置问题.后来尝试了半天,也在网上搜 ...
- R语言︱非结构化数据处理神器——rlist包
本文作者:任坤,厦门大学王亚南经济研究院金融硕士生,研究兴趣为计算统计和金融量化交易,pipeR,learnR,rlist等项目的作者. 近年来,非关系型数据逐渐获得了更广泛的关注和使用.下面分别列举 ...