博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1977 次小生成树(最近公共祖先)
阅读量:6236 次
发布时间:2019-06-22

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

题目链接:

题意:求一棵树的严格次小生成树,即权值严格大于最小生成树且权值最小的生成树。

思路:若现在已经得到了最小生成树,那么若 添加一条边E,就会得到一个环,我们只需要去掉环上权值小于E且最大的一条边就会得到另一棵较优的生成树。因此,只需要枚举不在生成树上的边,计算将其添 加到最小生成树中得到的新生成树的权值。取最小值即可。那么,现在的问题就是在一个圈中找到一个最大的小于新添加的边的权值的边。由于最小生成树是一棵 树,可以利用最近公共祖先,并记录路径上权值的最大和次大值。则新加入的边若大于圈上其他边的最大值X,删掉X即可;否则掉圈上的次小值。

 

struct node{    int u,v,w,flag;};node a[N<<2];vector
> g[N];int f[N][20],dp1[N][20],dp2[N][20];int n,m;int cmp(node a,node b){ return a.w
a) b=a,a=x; else if(x
b) b=x;}int deal(int x,int a,int b){ if(x==a) { if(b==-1) return -1; return x-b; } if(a==-1) return -1; return x-a;}i64 cal(int t){ int u=a[t].u,v=a[t].v,w=a[t].w; int Max1=-1,Max2=-1; if(dep[u]>dep[v]) swap(u,v); int x=dep[v]-dep[u]; int i; for(i=0;i<20;i++) if(x&(1<
=0;i--) { if(f[u][i]&&f[v][i]&&f[u][i]!=f[v][i]) { up(dp1[u][i],Max1,Max2); up(dp2[u][i],Max1,Max2); up(dp1[v][i],Max1,Max2); up(dp2[v][i],Max1,Max2); u=f[u][i]; v=f[v][i]; } } up(dp1[u][0],Max1,Max2); up(dp2[u][0],Max1,Max2); up(dp1[v][0],Max1,Max2); up(dp2[v][0],Max1,Max2); return deal(w,Max1,Max2);}int main(){ RD(n,m); int i; FOR1(i,m) { RD(a[i].u,a[i].v,a[i].w); a[i].flag=1; } sort(a+1,a+m+1,cmp); FOR1(i,n) p[i]=i; i64 ans=0; int u,v; FOR1(i,m) { u=get(a[i].u); v=get(a[i].v); if(u==v) continue; a[i].flag=0; ans+=a[i].w; add(a[i].u,a[i].v,a[i].w); p[u]=v; } DFS(1,-1); init(); i64 k=inf,temp; FOR1(i,m) if(a[i].flag) { temp=cal(i); if(temp!=-1&&temp

 

 

 

转载地址:http://gxzia.baihongyu.com/

你可能感兴趣的文章
迪米特法则
查看>>
Sql Server数据库自增长字段标识列的插入或更新修改操作办法
查看>>
CentOS,Fedora,Debian,Ubuntu,SuSE——我到底爱谁
查看>>
js方法call和apply实例解析
查看>>
也谈读书和书籍选择问题(C#)
查看>>
Jquery 数组操作(转)
查看>>
【BZOJ】1093: [ZJOI2007]最大半连通子图(tarjan+拓扑序)
查看>>
老码农教你学英语
查看>>
博客转发小工具2
查看>>
simple_html_dom使用小结
查看>>
Unity手游之路&lt;七&gt;角色控制器
查看>>
puma vs passenger vs rainbows! vs unicorn vs thin 适用场景 及 performance
查看>>
js中的总结汇总(以后的都收集到这篇)
查看>>
QQ左侧滑动显示
查看>>
sql server中局部变量与全局变量的 申明与赋值(转)
查看>>
从无线安全到内网渗透
查看>>
Xamarin iOS教程之申请付费开发者账号下载证书
查看>>
!+"\v1" 用来“判断浏览器类型”还是用来“IE判断版本”的问题!
查看>>
javascript之Style物
查看>>
C# 公历转农历
查看>>