博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Noi2014] 魔法森林
阅读量:6092 次
发布时间:2019-06-20

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

Description

给出\(n\)个点,\(m\)条边的无向图

每条边有两个权值\(a\)\(b\)

定义一条路径的代价为边中最大的\(a\)值和最大的\(b\)值之和

求从\(1\)\(n\)的最小代价

Solution 

把边按照\(a\)来排序,然后动态维护原树关于\(b\)的最小生成树,考虑用\(lct\)来维护

Code 

#include
using namespace std;int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} return x*f;}#define reg registerconst int MN=1.5e5+5,MM=1e5+5,inf=0x3f3f3f3f;struct LCT{ int c[MN][2],fa[MN],w[MN],X[MN],st[MN],N,a[MN],b[MN]; bool rev[MN]; bool nrt(int x){return c[fa[x]][0]==x||c[fa[x]][1]==x;} void Rev(int x){rev[x]^=1;std::swap(c[x][0],c[x][1]);} bool get(int x){return c[fa[x]][1]==x;} void up(int x) { X[x]=x; if(w[X[c[x][0]]]>w[X[x]]) X[x]=X[c[x][0]]; if(w[X[c[x][1]]]>w[X[x]]) X[x]=X[c[x][1]]; } inline void down(int x){if(x&&rev[x])Rev(c[x][0]),Rev(c[x][1]),rev[x]=0;} void rtt(int x) { int y=fa[x],z=fa[y],l=get(x),r=l^1;if(nrt(y))c[z][get(y)]=x;fa[x]=z; c[y][l]=c[x][r];fa[c[x][r]]=y;c[x][r]=y;fa[y]=x;up(y); } void Splay(int x) { int i,top;st[top=1]=x; for(i=x;nrt(i);i=fa[i])st[++top]=fa[i];//wrong af for(;top>0;--top)down(st[top]); for(;nrt(x);rtt(x)) if(nrt(fa[x])) rtt(get(x)^get(fa[x])?x:fa[x]); up(x); } void acs(int x){for(int i=0;x;x=fa[i=x])Splay(x),c[x][1]=i,up(x);}//wrong af void mkrt(int x){acs(x);Splay(x);Rev(x);} int fdrt(int x){acs(x);Splay(x);for(;c[x][0];down(c[x][0]),x=c[x][0]);Splay(x);return x;}//forget to Splay af void link(int x,int y){mkrt(x);fa[x]=y;} void cut(int x,int y){mkrt(x);acs(y);Splay(y);c[y][0]=fa[x]=0,up(y);}//forget to up af void ins(int x,int y,int B) { mkrt(x); if(fdrt(y)^x){w[++N]=B;link(a[N]=x,N);link(b[N]=y,N);return;} mkrt(x);acs(y);Splay(y); if(B>=w[X[y]]) return; int t=X[y];cut(t,a[t]);cut(t,b[t]); w[++N]=B;link(a[N]=x,N);link(b[N]=y,N); } int que(int x,int y) { mkrt(x);if(fdrt(y)^x) return inf; acs(y);Splay(y);return w[X[y]]; }}lct;struct edge{int u,v,a,b;}e[MM];inline bool cmp(const edge&x,const edge&y){return x.a


Blog来自PaperCloud,未经允许,请勿转载,TKS!

转载于:https://www.cnblogs.com/PaperCloud/p/10915501.html

你可能感兴趣的文章
app内部H5测试点总结
查看>>
利用Excel表格中的宏,轻松提取首字母
查看>>
ijkplayer实现IMediaDataSource
查看>>
Docker - 创建支持SSH服务的容器镜像
查看>>
[TC13761]Mutalisk
查看>>
三级菜单
查看>>
Data Wrangling文摘:Non-tidy-data
查看>>
加解密算法、消息摘要、消息认证技术、数字签名与公钥证书
查看>>
while()
查看>>
常用限制input的方法
查看>>
Ext Js简单事件处理和对象作用域
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
12.通过微信小程序端访问企查查(采集工商信息)
查看>>
WinXp 开机登录密码
查看>>
POJ 1001 Exponentiation
查看>>
HDU 4377 Sub Sequence[串构造]
查看>>
云时代架构阅读笔记之四
查看>>
WEB请求处理一:浏览器请求发起处理
查看>>
Lua学习笔记(8): 元表
查看>>
PHP经典算法题
查看>>