题目链接 BZOJ
洛谷

对每种颜色维护一个LCT,保存点之间的连接关系。
修改权值A[x]和所有Max[x]都要改;
修改边的颜色先枚举所有颜色,看是否在某种颜色中有边,然后断开。(枚举一遍就行啊 还以为要set什么的存边的颜色)
(条件1直接用数组存233)
修改x的颜色必须先把x旋到根再改!

(好像只能是条链啊)

//3364kb    5952ms
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=1e4+5;int n,m,C,q,A[N],num[N][11];
struct LCT
{#define lson son[x][0]#define rson son[x][1]int fa[N],son[N][2],Max[N],sk[N];bool tag[N];inline void Update(int x){Max[x]=std::max(A[x],std::max(Max[lson],Max[rson]));}inline bool n_root(int x){return son[fa[x]][0]==x||son[fa[x]][1]==x;}inline void Rev(int x){std::swap(lson,rson), tag[x]^=1;}inline void PushDown(int x){if(tag[x]) Rev(lson),Rev(rson),tag[x]=0;}void Rotate(int x){int a=fa[x],b=fa[a],l=son[a][1]==x,r=l^1;if(n_root(a)) son[b][son[b][1]==a]=x;if(son[x][r]) fa[son[x][r]]=a;fa[a]=x, fa[x]=b, son[a][l]=son[x][r], son[x][r]=a;Update(a);}void Splay(int x){int t=1,a=x; sk[1]=x;while(n_root(a)) sk[++t]=a=fa[a];while(t) PushDown(sk[t--]);while(n_root(x)){a=fa[x];if(n_root(a)) Rotate(son[a][1]==x^son[fa[a]][1]==a?x:a);Rotate(x);}Update(x);}void Access(int x){for(int pre=0; x; x=fa[pre=x])Splay(x), rson=pre, Update(x);}void Make_root(int x){Access(x), Splay(x), Rev(x);}void Split(int x,int y){Make_root(x), Access(y), Splay(y);}int Find_root(int x){Access(x), Splay(x);while(lson) x=lson;return x;}bool pre_Link(int x,int y){Make_root(x);return Find_root(y)!=x;}void Link(int x,int y){fa[x]=y;}bool pre_Cut(int x,int y){Make_root(x);return Find_root(y)==x&&fa[x]==y&&!rson;}void Cut(int x,int y){fa[x]=son[y][0]=0, Update(y);}void Modify(int x,int col){//修改颜色 Access(x), Splay(x), Update(x);}
}t[10];
inline int read()
{int now=0,f=1;register char c=gc();for(;!isdigit(c);c=gc()) if(c=='-') f=-1;for(;isdigit(c);now=now*10+c-'0',c=gc());return now*f;
}int main()
{n=read(),m=read(),C=read(),q=read();for(int i=1; i<=n; ++i) A[i]=read();for(int u,v,w,i=1; i<=m; ++i)u=read(),v=read(),w=read(),++num[u][w],++num[v][w],t[w].pre_Link(u,v),t[w].Link(u,v);int opt,c,x,y,pos;while(q--){opt=read();if(!opt){x=read(),A[x]=y=read();for(int i=0; i<C; ++i) t[i].Modify(x,y);}else if(opt==1){x=read(),y=read(),c=read(),pos=-1;for(int i=0; i<C; ++i)if(t[i].pre_Cut(x,y)) {pos=i; break;}if(~pos){if(pos==c) puts("Success.");//这个要判!else if(num[x][c]>=2||num[y][c]>=2) puts("Error 1.");else if(!t[c].pre_Link(x,y)) puts("Error 2.");else t[c].Link(x,y),t[pos].Cut(x,y),--num[x][pos],--num[y][pos],++num[x][c],++num[y][c],puts("Success.");}else puts("No such edge.");}else{c=read(),x=read(),y=read();if(!t[c].pre_Link(x,y)) t[c].Split(x,y), printf("%d\n",t[c].Max[y]);else puts("-1");}}return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/8629672.html

BZOJ.2816.[ZJOI2012]网络(LCT)相关推荐

  1. BZOJ2816:[ZJOI2012]网络(LCT)

    Description 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构 ...

  2. [bzoj2816][ZJOI2012]网络

    2816: [ZJOI2012]网络 Time Limit: 30 Sec Memory Limit: 128 MB Submit: 319 Solved: 175 [Submit][Status][ ...

  3. BZOJ2816: [ZJOI2012]网络

    BZOJ2816: [ZJOI2012]网络 BZOJ题面. 题目描述 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条 ...

  4. ZJOI2012网络 题解报告【LCT】

    题目描述 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构成的环. 在这 ...

  5. BZOJ 3091 城市旅行 (LCT)

    3091: 城市旅行 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2251  Solved: 761 [Submit][Status][Discu ...

  6. [BZOJ 3931][CQOI2015]网络吞吐量(SPFA+网络流)

    Description 路由是指通过计算机网络把信息从源地址传输到目的地址的活动,也是计算机网络设计中的重点和难点.网络中实现路由转发的硬件设备称为路由器.为了使数据包最快的到达目的地,路由器需要选择 ...

  7. bzoj 3881 [Coci2015]Divljak——LCT维护parent树链并

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3881 对 S 建 SAM ,每个 T 会让 S 的 parent 树的链并答案+1:在 T ...

  8. [bzoj] 2049 洞穴勘探 || LCT

    原题 这是一道LCT的板子题. 至于LCT--link cut tree,也叫动态树,用splay实现动态连边的树. 预备知识: 实边:一个非叶节点,向它的儿子中的一个连一条特殊的边,称为实边;该非叶 ...

  9. BZOJ 4538: [Hnoi2016]网络

    这个题目就是特别裸啊,很明显就是先树链剖分,然后在线段树每个节点上维护两个堆,来维护插入和删除,查询的时候就暴力查就好了. 似乎很简单啊,我竟然在luogu上1A了,结果交到bzoj上MLE,看过讨论 ...

  10. bzoj 2656: [Zjoi2012]数列(sequence)(简单高精度模板2.0)

    2656: [Zjoi2012]数列(sequence) Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 1663  Solved: 860 [Subm ...

最新文章

  1. 基于IndexedDB实现简单文件系统
  2. 【SAP-PM模块】服务采购业务流程
  3. 如何用Powerdesigner的PDM(物理数据模型)生成数据库及逆向工程(将现有的数据库生成PDM)(转)...
  4. win10 平台VS2019最简安装实现C++/C开发
  5. Visual Studio 11 九大新特性:图文详解【转】
  6. Token ,Cookie和Session的区别
  7. linux图形界面setup,linux setup命令参数及用法详解--linux图形界面设置命令
  8. windows浏览器访问虚拟机开的rabbitmq服务,无法访问
  9. 车辆路径规划问题(VRP问题)
  10. 送客户的祝福语_送给客户的温馨祝福语
  11. 调手表(蓝桥杯2018年B组真题)
  12. SpringBoot:用腾讯企业微信邮箱发送邮件
  13. input框只能输入非负数
  14. Cocoa Application-基础
  15. Lock锁及获取锁的四种方法
  16. Java Agent入门教程
  17. 在FreeBSD下安装subversion
  18. xgboost学习样例解析之binary classification
  19. 模式识别与机器学习(更新中)
  20. STM32 HAL RTC配置及优化

热门文章

  1. Sublime Text3的Package Control安装教程,及报错解决There Are No Packages Available For Installation...
  2. JS基础入门篇(二十)—事件对象以及案例(二)
  3. 【云周刊】第125期:“机器学习”三重门_“中庸之道”趋若人
  4. 解决Macbook网络连接成功但是图标一直显示正在查找网络问题
  5. Android系统和内核编译命令
  6. h264解码延迟优化_OPPO Enco Free真无线双发耳机提速120ms,延迟优于苹果华为
  7. Zookeeper C API 指南五(同步 API 介绍)
  8. 缺页中断——FIFO、LRU、OPT这三种置换算法
  9. linux 线程同步与互斥:互斥锁 多线程访问共享资源时,使用互斥锁进行控制
  10. linux系统编程 -- 僵尸进程 孤儿进程