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

本文共 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

你可能感兴趣的文章
现在物价虽然高得离谱,但是内存条都白菜价格了,需要调整程序架构的思维“与时俱进” --- 改进系列之一...
查看>>
Bridgehead Servers
查看>>
sprintf() 和 sscanf()
查看>>
open***
查看>>
Codevs 4246 奶牛的身高
查看>>
微服务专题:服务注册与发现之二Consul注册服务
查看>>
SPRING BOOT是如何实现自动初始化的?
查看>>
用VisualVM远程监控Java进程
查看>>
SVN常见图标含义及图标无法正常解决方法!
查看>>
yum install 出现 Transaction Check Error:
查看>>
paip.盘古汉字转拼音组件库使用总结
查看>>
JSP内置对象(9个常用的内置对象)
查看>>
EDI 解决方案之•EDI 消息传递•协议在 EDI 处理中的角色
查看>>
BizTalkServer 如何接收 EDI 消息(6)
查看>>
Android 通知栏
查看>>
如何使用POI对Excel表进行导入和导出
查看>>
Hyper-V中的“Network adapter “和“Legacy Network adapter”之间的区别
查看>>
淘宝开源平台(taobao-code)使用心得
查看>>
Fragment(片段)的使用步骤
查看>>
我的友情链接
查看>>