loj#137 最小瓶颈路 加强版
时间:2019-09-19
本文章向大家介绍loj#137 最小瓶颈路 加强版,主要包括loj#137 最小瓶颈路 加强版使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
分析
我们知道答案一定再最小生成树上
于是我们按边权从小到大建立kruskal重构树
然后每次查询lca的值即可
由于询问较多采用st表维护lca
代码
格式化代码
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
struct node {
int x,y,z;
};
node d[400100];
vector<int>v[400100];
int lg[400100],A,B,C,P,dep[400100],no[400100];
int pr[400100][23],val[400100],cnt,n,m,q,T,fa[400100];
inline int rnd(){return A=(A*B+C)%P;}
inline int mmin(int x,int y){return dep[x]<dep[y]?x:y;}
inline int sf(int x){return fa[x]==x?x:fa[x]=sf(fa[x]);}
inline bool cmp(const node x,const node y){return x.z<y.z;}
inline int que(int x,int y){int k=lg[y-x+1];return mmin(pr[x][k],pr[y-(1<<k)+1][k]);}
inline void dfs(int x,int f){
dep[x]=dep[f]+1;
pr[++T][0]=x;
no[x]=T;
for(int i=0;i<v[x].size();++i){
dfs(v[x][i],x);
pr[++T][0]=x;
}
}
inline int ra(){
int x=0;char s=getchar();
while(!isdigit(s))s=getchar();
while(isdigit(s))x=(x<<1)+(x<<3)+(s-'0'),s=getchar();
return x;
}
int main(){
int i,j,k,Ans=0;
n=ra(),m=ra();
for(i=1;i<=m;++i)d[i].x=ra(),d[i].y=ra(),d[i].z=ra();
sort(d+1,d+m+1,cmp);
for(i=1;i<=2*n;++i)fa[i]=i;
k=0,cnt=n;
for(i=1;i<=m;++i){
int x=d[i].x,y=d[i].y;
if(sf(x)!=sf(y)){
v[++cnt].push_back(sf(x));
v[cnt].push_back(sf(y));
fa[sf(x)]=fa[sf(y)]=cnt;
val[cnt]=d[i].z;
k++;
}
if(k==n-1)break;
}
dfs(cnt,0);
lg[1]=0;
for(i=2;i<=T;++i)lg[i]=lg[i>>1]+1;
for(i=1;i<=20;++i)
for(j=1;j+(1<<i)<=T;++j)
pr[j][i]=mmin(pr[j+(1<<(i-1))][i-1],pr[j][i-1]);
q=ra(),A=ra(),B=ra(),C=ra(),P=ra();
while(q--){
int x=rnd()%n+1,y=rnd()%n+1;
x=no[x],y=no[y];
if(x>y)swap(x,y);
Ans=Ans+val[que(x,y)];
Ans=(Ans>mod?Ans-mod:Ans);
}
printf("%d\n",Ans);
return 0;
}
原文地址:https://www.cnblogs.com/yzxverygood/p/11547207.html
- orabbix结合python发送图形报表(二) (r6笔记第38天)
- 14(01)正则表达式,Pattern,Mactcher,Math,BigInteger,BigDeximal,System等
- oracle的TAF浅析 (r6笔记第37天)
- R语言高级绘图命令(标题-颜色等)
- 14(02)正则表达式,Pattern,Mactcher,Math,BigInteger,BigDeximal,System等
- R语言 判别分析
- Apache、struts1、struts2文件上传下载的3种方式
- 解析实时的DB time过程分析(r6笔记第35天)
- sql嵌入html格式显示报表(r6笔记第34天)
- hive计算日期差函数datediff,hive修改日期连接符
- 深度学习界的 “吃鸡挂”——目标检测 SSD 实验
- Hadoop查看所有JOB以及如何Kill指定用户的所有Job
- Java基础-23(01)总结多线程,线程实现Runnable接口,线程名字获取和设置,线程控制,线程安全,同步线程
- ORA-01427问题的分析和解决(r6笔记第51天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法