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 ...
随机推荐
- Linux 虚拟IP
虚拟IP Linux网卡上绑定另一个虚拟ip,即网卡上一个真实ip一个虚拟ip.当然通过这2个ip都可以连接到该主机. 实现原理主要是靠TCP/IP的ARP协议.因为ip地址只是一个逻辑 地址,在以太 ...
- HDU 3001(状态压缩dp)
状态压缩dp的第一题! 题意:Mr ACMer想要进行一次旅行,他决定访问n座城市.Mr ACMer 可以从任意城市出发,必须访问所有的城市至少一次,并且任何一个城市访问的次数不能超过2次.n座城市间 ...
- 基于jq的表单填充
//表单填充 formDataLoad: function (domId, obj) { for (var property in obj) { if (obj.hasOwnProperty(prop ...
- 在windows端和linux端安装Git
一.Git的安装 1. 在windows端 到地址:https://git-scm.com/downloads 选择对应版本下载后,进行傻瓜式安装即可 2. 在linux端 查看是否安装了git,出 ...
- CentOS6.9安装mysql5.7
1.查看系统版本 uname -a 2.卸载old mysql rpm -qa|grep -i mysql rpm -ev MySQL-client-5.5.25a-1.rhel5 如果提示依赖错误, ...
- spring 代码中获取ApplicationContext(@AutoWired,ApplicationListener)
2017年度全网原创IT博主评选活动投票:http://www.itbang.me/goVote/234 学习spring框架时间不长,一点一滴都得亲力亲为.今天忽然觉得老是通过@Autowir ...
- 对于JDBC数据库的初始化操作
package com.bluesky.connection; import java.sql.Connection; import java.sql.DriverManager; import ja ...
- CodeForces-731A
每次找到最短距离,然后更新指针的位置. AC代码: #include<cstdio> #include<cmath> const int maxn=100+5; char s[ ...
- requests+多进程poll+pymongo实现抓取小说
今天看着有个很吸引人的小说作品信息:一家只在深夜开门营业的书屋,欢迎您的光临.作为东野奎吾<深夜食堂>漫画的fans,看到这个标题按捺不住我的好奇心........ 所以我又抓下来了,总共 ...
- 从零开始学习前端JAVASCRIPT — 14、闭包与继承
一.闭包 1 . 概念:闭包就是能够读取其他函数内部变量的函数.在JS中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解为”定义在一个函数内部的函数”. 2 . 闭包的特点 1)可以读取 ...