博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj3732: Network
阅读量:5085 次
发布时间:2019-06-13

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

那就是最小生成树咯

建树后用LCA求解即可。

#include
#include
#include
#include
#include
#include
using namespace std;struct node{ int x,y,d,next;}a[31000];int len,last[21000];void ins(int x,int y,int d){ len++; a[len].x=x;a[len].y=y;a[len].d=d; a[len].next=last[x];last[x]=len;}int Bin[30];int dep[21000],f[30][21000],mx[30][21000];void dfs(int x){ for(int i=1;Bin[i]<=dep[x];i++) { f[i][x]=f[i-1][f[i-1][x]]; mx[i][x]=max(mx[i-1][x],mx[i-1][f[i-1][x]]); } for(int k=last[x];k;k=a[k].next) { int y=a[k].y; if(y!=f[0][x]) { dep[y]=dep[x]+1; f[0][y]=x;mx[0][y]=a[k].d; dfs(y); } }}int LCA(int x,int y){ if(dep[x]
=0;i--) if(dep[x]-dep[y]>=Bin[i]) ans=max(ans,mx[i][x]), x=f[i][x]; if(x==y)return ans; for(int i=25;i>=0;i--) if(dep[x]>=Bin[i]&&f[i][x]!=f[i][y]) ans=max(ans,max(mx[i][x],mx[i][y])), x=f[i][x],y=f[i][y]; return max(ans,max(mx[0][x],mx[0][y]));}struct edge{ int x,y,d;}e[31000];bool cmp(edge n1,edge n2){ return n1.d

 

转载于:https://www.cnblogs.com/AKCqhzdy/p/8692532.html

你可能感兴趣的文章
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
@Column标记持久化详细说明
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>
站立会议08(冲刺2)
查看>>
url查询参数解析
查看>>
http://coolshell.cn/articles/10910.html
查看>>
[转]jsbsim基础概念
查看>>
DIV和SPAN的区别
查看>>
第一次使用cnblogs
查看>>
C#语法糖之 session操作类 asp.net
查看>>
2015 Multi-University Training Contest 3
查看>>
使用Gitblit 在windows 上部署你的Git Server
查看>>
217. Contains Duplicate
查看>>
vue2.0 关于Vue实例的生命周期
查看>>
jenkins 更换主数据目录
查看>>