zjoi 网络
题解:
很显然会发现对于每种颜色分开处理这是一颗树
然后就是裸的lct
有个坑就是判断操作1 可能颜色改成跟原先一样的
代码:
#include <bits/stdc++.h>
using namespace std;
#define N 11000
#define M 15
int n,m,c,kk;
int cnt[M][N],v[N];
struct lct{
int data[N],fa[N];
int leftson[N],rightson[N];
int count2[N];
bool rev[N];
void down(int x)
{
if (!rev[x]) return;
swap(leftson[x],rightson[x]); rev[x]=;
rev[leftson[x]]^=; rev[rightson[x]]^=;
}
void updata(int x)
{
down(x);
count2[x]=count2[leftson[x]]+count2[rightson[x]]+;
data[x]=max(v[x],max(data[leftson[x]],data[rightson[x]]));
}
bool pd(int x)
{
int y=fa[x];
if (leftson[y]!=x&&rightson[y]!=x) return false;
else return (true);
}
void rotate(int x,int y)
{
int father=fa[x];
if (y==)
{
rightson[father]=leftson[x];
if (leftson[x]) fa[leftson[x]]=father;
} else
{
leftson[father]=rightson[x];
if (rightson[x]) fa[rightson[x]]=father;
}
fa[x]=fa[father];
if (pd(father))
{
if (leftson[fa[x]]==father)
leftson[fa[x]]=x;
else rightson[fa[x]]=x;
}
fa[father]=x;
if (y==) leftson[x]=father;
else rightson[x]=father;
updata(father); updata(x);
}
void dfs(int x)
{
if (pd(x)) dfs(fa[x]);
down(x);
}
void splay(int x)
{
dfs(x);
int father=fa[x];
while (pd(x))
{
if (!pd(father))
{
if (x==leftson[father]) rotate(x,);
else rotate(x,);
} else
{
if (father==leftson[fa[father]])
if (x==leftson[father])
rotate(father,),rotate(x,);
else rotate(x,),rotate(x,);
else
if (x==rightson[father])
rotate(father,),rotate(x,);
else rotate(x,),rotate(x,);
}
father=fa[x];
}
}
void access(int x)
{
for (int y=;x;y=x,x=fa[x])
splay(x),rightson[x]=y,updata(x);
}
void makeroot(int x)
{
access(x);
splay(x);
rev[x]^=;
}
int findroot(int x)
{
access(x);
splay(x);
while (leftson[x]) x=leftson[x];
return x;
}
void split(int x,int y)
{
makeroot(x);
access(y);
splay(y);
}
bool link(int x,int y)
{
makeroot(x);
if (findroot(y)!=x)
{
fa[x]=y;
return();
}
else return();
}
void cut(int x,int y)
{
makeroot(x);
if (findroot(y)==x&&fa[x]==y)
{
fa[x]=leftson[y]=;
updata(y);
}
}
} num[M];
struct hash{
#define mo 5000007
int cc=;
struct {
int a,b,c;
}f[mo+];
void push(int x,int y,int z)
{
int tmp=(cc*x+y)%mo;
while (f[tmp].a) tmp=tmp%mo+;
f[tmp].a=x; f[tmp].b=y; f[tmp].c=z;
}
int find(int x,int y)
{
int tmp=(cc*x+y)%mo;
while (f[tmp].a&&(!(f[tmp].a==x&&f[tmp].b==y))) tmp=tmp%mo+;
if (f[tmp].a==x&&f[tmp].b==y) return(tmp);
else return(-);
}
}hash;
int main()
{
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
cin>>n>>m>>c>>kk;
for (int i=;i<=n;i++)
cin>>v[i];
for (int i=;i<=m;i++)
{
int c,d,e;
cin>>c>>d>>e;
hash.push(c,d,e); hash.push(d,c,e);
cnt[e][c]++; cnt[e][d]++;
num[e].link(c,d);
}
int k,x,y,z;
for (int i=;i<=kk;i++)
{
cin>>k;
if (k==)
{
cin>>x>>y;
for (int i=;i<c;i++)
{
num[i].access(x);
num[i].splay(x);
v[x]=y;
num[i].updata(x);
}
}
if (k==)
{
cin>>x>>y>>z;
int tmp=hash.find(x,y),tmp2=hash.find(y,x),tmp3=hash.f[tmp].c;
if (tmp==-) cout<<"No such edge."<<endl; else
if (tmp3==z) cout<<"Success."<<endl; else
if ((cnt[z][x]==||cnt[z][y]==)) cout<<"Error 1."<<endl; else
if (num[z].link(x,y))
{
num[tmp3].cut(x,y);
hash.f[tmp].c=z; hash.f[tmp2].c=z;
cnt[tmp3][x]--; cnt[tmp3][y]--;
cnt[z][x]++; cnt[z][y]++;
cout<<"Success."<<endl;
} else cout<<"Error 2."<<endl;
}
if (k==)
{
cin>>z>>x>>y;
num[z].makeroot(x);
if (num[z].findroot(y)==x)
{
num[z].split(x,y);
cout<<num[z].data[y]<<endl;;
} else cout<<-<<endl;
}
}
return ;
}
zjoi 网络的更多相关文章
- zjoi网络
map加LCT水一下就过了 # include <stdio.h> # include <stdlib.h> # include <iostream> # incl ...
- [ 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 ...
随机推荐
- LR(0)文法项目集规范族、DFA和分析表的构建实例
最近在复习编译原理,考试之前以为自己懂了,眼高手低就没去实践.结果一考试出问题了.... 学习就要脚踏实地,容不得半点模糊.凭着侥幸心理很危险的.以后要引以为戒啊. 特别写出这篇文章 :一来总结一下这 ...
- MSVCR120.dll丢失问题
一.问题:丢失MSVCR120.dll 二.解决方法 到官网下载vcredist_x86.exe安装即可 地址:https://www.microsoft.com/en-us/download/det ...
- luogu P3674 小清新人渣的本愿
传送门 毒瘤lxl 本质是莫队,关键是怎么处理询问 这里需要开两个bitset(记为\(b1,b2\)),分别存\(x\)和\(n-x\)是否出现 对于询问1,即\(x-y=z\),由于\(y=x-z ...
- 3、输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 思路: 利用栈“先进后出”的性质,将链表的值存入到栈里,然后将栈里的值存入到构建好的容器里,最后打印容器. class So ...
- mysql 查询优化 ~explain解读之type的解读
一 简介:今天咱们来聊聊explain中type的相关解读 二 类型: system: 表中只有一条数据. 这个类型是特殊的 const 类型. const: 针对主键或唯一索引的等值查询扫描, 最 ...
- mysql 案例~关于pt-osc工具的用途
简介:今天咱们聊聊PT-OSC的东东一 简单介绍 1 标准组合 pt-online-schema-change --user= --password= --host= D=,t= --sock= ...
- ubuntu 上下左右键变成ABCD
1.在ubuntu终端环境出现: 这表示你正在insert mode.... 按esc,回到command mode,上下左右就回复到正常的方向键功能了 2.可能写的程序是在insert mode(r ...
- SpringBoot使用Redis缓存
(1).添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId&g ...
- BackBone结合ASP.NET MVC实现页面路由操作
1. 问题的背景 什么是页面路由操作,就是通过浏览器地址栏的标记来实现页面内部的一些操作,这些操作具有异步性和持久性.应用场景主要有页面操作过程中的添加收藏夹的操作.后退操作等过程中能完全恢复界面. ...
- 【黑客免杀攻防】读书笔记5 - PE格式讲解
0x01 MS-DOS头 MS-DOS头部的字段重点关注e_magic与最后一个e_lfanew是需要关注的. 第一个e_magic字段的值为4D5A,作用是可以作为判断这个文件是否是PE文件. 最后 ...