博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018.11.09 codeforces487E. Tourists(tarjan+树链剖分)
阅读量:5279 次
发布时间:2019-06-14

本文共 2064 字,大约阅读时间需要 6 分钟。

先把边双连通分量用圆方树一样的方法缩点,然后把新建的树树剖维护。
注意对于边双连通分量需要维护动态最小值,可以用multisetmultisetmultiset
代码:

#include
#define lc (p<<1)#define rc (p<<1|1)#define mid (T[p].l+T[p].r>>1)using namespace std;inline int read(){
int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar(); return ans;}const int N=2e5+5,M=3e5+5;int siz[N],w[N<<1],top[N],dep[N],pred[N],hson[N],num[N],dfn[N],low[N],tot=0,sig=0,n,m,q,blo[N],stk[N],Top=0,fa[N];struct Node{
int l,r,mn;}T[N<<2];vector
g[N],e[N<<1];multiset
W[N<<1];inline void tarjan(int p,int pre){
dfn[p]=low[p]=++tot,stk[++Top]=p; for(int i=0;i
=dfn[p]){
int tmp; ++sig,e[p].push_back(sig); do tmp=stk[Top--],blo[tmp]=sig,e[sig].push_back(tmp),W[sig].insert(w[tmp]);while(tmp^v); w[sig]=*(W[sig].begin()); } } else low[p]=min(low[p],dfn[v]); }}inline void dfs1(int p){
siz[p]=1; for(int i=0;i
siz[hson[p]])hson[p]=v; }}inline void dfs2(int p,int tp){
top[p]=tp,pred[num[p]=++tot]=p; if(!hson[p])return; dfs2(hson[p],tp); for(int i=0;i
mid)return query(rc,ql,qr); return min(query(lc,ql,mid),query(rc,mid+1,qr));}inline int ask(int x,int y){ int ret=1e9; while(top[x]^top[y]){ if(dep[top[x]]
n&&fa[y])ret=min(ret,w[fa[y]]); return ret;}inline void modify(int p,int v){ if(blo[p]){ set
::iterator it=W[blo[p]].find(w[p]); W[blo[p]].erase(it),W[blo[p]].insert(v),w[blo[p]]=*(W[blo[p]].begin()),update(1,num[blo[p]],w[blo[p]]); } w[p]=v,update(1,num[p],v);}int main(){ sig=n=read(),m=read(),q=read(); for(int i=1;i<=n;++i)w[i]=read(); for(int i=1,u,v;i<=m;++i)u=read(),v=read(),g[u].push_back(v),g[v].push_back(u); tarjan(1,0),dfs1(1),tot=0,dfs2(1,1),build(1,1,sig); for(int i=1,x,y;i<=q;++i){ char s[5]; scanf("%s",s),x=read(),y=read(); if(s[0]=='C')modify(x,y); else printf("%d\n",ask(x,y)); }}

转载于:https://www.cnblogs.com/ldxcaicai/p/10084729.html

你可能感兴趣的文章
spring ioc原理(看完后大家可以自己写一个spring)
查看>>
hdu 1028 Ignatius and the Princess III(母函数入门+模板)
查看>>
Ubuntu下配置安装telnet server
查看>>
Codeforces 235 E Number Challenge
查看>>
ubuntu 常见命令整理
查看>>
关于vue的npm run dev和npm run build
查看>>
Hive架构
查看>>
EJBCA安装教程+postgresql+wildfly10
查看>>
(五十四)涂鸦的实现和截图的保存
查看>>
关于微信暴力加很申请
查看>>
06享元、责任链
查看>>
ubuntu如何部署tftp服务
查看>>
【Alpha版本】冲刺阶段——Day 8
查看>>
解决CentOS6.x或RedHat Linux 6.x版本不能通过System eth0以固定IP访问外网的问题
查看>>
(转)Expression Tree不完全入门
查看>>
Struts2的工作原理
查看>>
配置EditPlus使其可以编译运行java程序
查看>>
我眼中的Android IDE
查看>>
C++默认参数值函数
查看>>
java中的占位符\t\n\r\f
查看>>