p4768 [NOI2018]归程
时间:2019-09-19
本文章向大家介绍p4768 [NOI2018]归程,主要包括p4768 [NOI2018]归程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
分析
先求出每个点到终点的最短路
我们按照海拔从大到小排序
然后求出kruskal重构树
每次答案就是一个可行子树中的最短路的最小值
代码
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define li long long
int head[800100],nxt[800100],to[800100],w[800100],n,m,cnt;
int dis[800100],vis[800100],tot,pr[800100][23],fa[800100],val[800100];
vector<int>v[800100];
struct node {
int x,y,z,w;
};
node d[400100];
inline bool cmp(const node x,const node y){return x.w>y.w;}
inline int sf(int x){return fa[x]==x?x:fa[x]=sf(fa[x]);}
struct Kruskal_Tree {
inline void build(){
int i,j,k=0;
for(i=1;i<=n+m;i++)v[i].clear();
tot=n;sort(d+1,d+m+1,cmp);
for(i=1;i<=n+m;i++)fa[i]=i;
for(i=1;i<=m;i++){
int x=d[i].x,y=d[i].y,z=d[i].w;
if(sf(x)!=sf(y)){
v[++tot].push_back(sf(x));
v[tot].push_back(sf(y));
fa[sf(x)]=fa[sf(y)]=tot;
val[tot]=z;
k++;
}
if(k==n-1)break;
}
}
inline void dfs(int x,int fa){
pr[x][0]=fa;
for(int i=0;i<v[x].size();i++)
if(v[x][i]!=fa){
dfs(v[x][i],x);
dis[x]=min(dis[x],dis[v[x][i]]);
}
}
inline void deal(){
for(int i=1;i<=20;i++)
for(int j=1;j<=tot;j++)
pr[j][i]=pr[pr[j][i-1]][i-1];
}
inline int que(int x,int y){
for(int i=20;i>=0;i--)if(pr[x][i]&&val[pr[x][i]]>y)x=pr[x][i];
return x;
}
};
Kruskal_Tree T;
priority_queue<pair<int,int> >q;
inline void init(){
cnt=0;
memset(head,0,sizeof(head));
memset(dis,0x7f,sizeof(dis));
memset(vis,0,sizeof(vis));
memset(pr,0,sizeof(pr));
}
inline void add(int x,int y,int z){
nxt[++cnt]=head[x];
head[x]=cnt;
to[cnt]=y;
w[cnt]=z;
nxt[++cnt]=head[y];
head[y]=cnt;
to[cnt]=x;
w[cnt]=z;
}
inline void dij(){
dis[1]=0;
q.push(mp(0,1));
while(!q.empty()){
int x=q.top().se;
q.pop();
if(vis[x])continue;
vis[x]=1;
for(int i=head[x];i;i=nxt[i]){
if(dis[to[i]]>(li)(dis[x]+w[i])){
dis[to[i]]=dis[x]+w[i];
q.push(mp(-dis[to[i]],to[i]));
}
}
}
}
int main(){
int i,j,k,t,x,y,z,q,s;
scanf("%d",&t);
while(t--){
init();
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){
scanf("%d%d%d%d",&d[i].x,&d[i].y,&d[i].z,&d[i].w);
add(d[i].x,d[i].y,d[i].z);
}
dij();
T.build();
T.dfs(tot,0);
T.deal();
int lastans=0;
scanf("%d%d%d",&q,&k,&s);
while(q--){
scanf("%d%d",&x,&y);
x=(x+1ll*k*lastans%n-1)%n+1;
y=(y+1ll*k*lastans%(s+1))%(s+1);
lastans=dis[T.que(x,y)];
printf("%d\n",lastans);
}
}
return 0;
}
原文地址:https://www.cnblogs.com/yzxverygood/p/11547136.html
- 关于primary key和foreign key的问题处理(60天)
- Git 进阶指南
- Python 文本挖掘:使用情感词典进行情感分析(算法及程序设计)
- 可能是地球上最好用的 Mac 词典工具
- 经典Java面试题收集
- alert日志中的一条ora警告信息的分析(59天)
- golang 详解defer
- 猫哥网络编程系列:HTTP PEM 万能调试法
- 分析函数牛刀小试 (59天)
- 猫哥网络编程系列:详解 BAT 面试题
- SpringMVC中@RequestBody引起的400异常处理,返回校验失败具体信息
- 关于primary key和unique index的奇怪问题 (58天)
- 在centos7上安装Jenkins
- Spring resource bundle多语言,单引号format异常
- 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 数组属性和方法
- Android 应用保存状态
- 2020-8-9日报:修复zip在某些X64机器上的运行崩溃问题
- 专题一:预处理数据(使用sklearn-preprocessing)
- 「Docker」使用 Docker run 覆盖 ENTRYPOINT
- 尝试在 Mono 3.0 下运行 ASP.NET MVC 4
- CentOS7使用yum安装nginx报错:获取 GPG 密钥失败:[Errno 14] curl#60 - "Peer's Certificate has expired."
- iOS 应用使用位置信息
- Silverlight CreateObjectEx 参考
- NHibernate 配置使用 Formula
- Not allowed to navigate top frame to data URL问题
- MonoTouch绑定CocoaTouch类库
- NuGet 使用自定义本地类库目录
- Flutter/Dart中的异步编程之Isolate
- System.Net.Http for Silverlight
- 在SAP WebClient UI里混用ABAP Webdynpro,会带来哪些问题?