首先肯定要预处理出每一个点到1的最短路(别写spfa)
然后以海拔为边权,建一棵kruskal重构树
用倍增找到vi最后一个小于pi的祖先,然后在子树中取min(预处理)

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 400005
4 struct ji1{
5 int x,y,z;
6 bool operator < (const ji1 &k)const{
7 return z>k.z;
8 }
9 }e[N];
10 struct ji2{
11 int nex,to,len;
12 }edge[N<<1];
13 struct ji3{
14 int k,d;
15 bool operator < (const ji3 &x)const{
16 return d>x.d;
17 }
18 };
19 priority_queue<ji3>q;
20 int T,E,n,m,x,y,z,w,ans,head[N],d[N],vis[N],v[N],ls[N],rs[N],f[N][21];
21 int find(int k){
22 if (k==f[k][0])return k;
23 return f[k][0]=find(f[k][0]);
24 }
25 void add(int x,int y,int z){
26 edge[E].nex=head[x];
27 edge[E].to=y;
28 edge[E].len=z;
29 head[x]=E++;
30 }
31 void dij(){
32 for(int i=2;i<=n;i++)d[i]=2e9;
33 memset(vis,0,sizeof(vis));
34 q.push(ji3{1,0});
35 while (!q.empty()){
36 int k=q.top().k;
37 q.pop();
38 if (vis[k])continue;
39 vis[k]=1;
40 for(int i=head[k];i!=-1;i=edge[i].nex){
41 int v=edge[i].to;
42 if (d[v]>d[k]+edge[i].len)q.push(ji3{v,d[v]=d[k]+edge[i].len});
43 }
44 }
45 }
46 void dfs(int k){
47 for(int i=1;i<=20;i++)f[k][i]=f[f[k][i-1]][i-1];
48 if (k<=n)return;
49 f[ls[k]][0]=f[rs[k]][0]=k;
50 dfs(ls[k]);
51 dfs(rs[k]);
52 }
53 int query(int k,int w){
54 for(int i=20;i>=0;i--)
55 if (w<v[f[k][i]])k=f[k][i];
56 return d[k];
57 }
58 int main(){
59 scanf("%d",&T);
60 while (T--){
61 scanf("%d%d",&n,&m);
62 memset(head,-1,sizeof(head));
63 E=ans=0;
64 for(int i=1;i<=m;i++){
65 scanf("%d%d%d%d",&x,&y,&z,&w);
66 add(x,y,z);
67 add(y,x,z);
68 e[i]=ji1{x,y,w};
69 }
70 dij();
71 for(int i=1;i<2*n;i++)f[i][0]=i;
72 sort(e+1,e+m+1);
73 for(int i=1;i<=m;i++){
74 x=find(e[i].x);
75 y=find(e[i].y);
76 if (x==y)continue;
77 v[++n]=e[i].z;
78 d[n]=min(d[x],d[y]);
79 ls[n]=x;
80 rs[n]=y;
81 f[x][0]=f[y][0]=n;
82 }
83 n=n/2+1;
84 dfs(2*n-1);
85 scanf("%d%d%d",&m,&z,&w);
86 for(int i=1;i<=m;i++){
87 scanf("%d%d",&x,&y);
88 printf("%d\n",ans=query((x+z*ans-1)%n+1,(y+z*ans)%(w+1)));
89 }
90 }
91 }

[bzoj5415]归程的更多相关文章

  1. BZOJ5415[Noi2018]归程——kruskal重构树+倍增+堆优化dijkstra

    题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l,a 描述一条边的长度.海 ...

  2. 【BZOJ5415】【NOI2018】归程(克鲁斯卡尔重构树)

    [NOI2018]归程(克鲁斯卡尔重构树) 题面 洛谷 题解 我在现场竟然没有把这道傻逼题给切掉,身败名裂. 因为这题就是克鲁斯卡尔重构树的模板题啊 我就直接简单的说一下把 首先发现答案就是在只经过海 ...

  3. BZOJ5415 [NOI2018] 归程

    今天也要踏上归程了呢~(题外话 kruskal重构树!当时就听学长们说过是重构树辣所以做起来也很快233 就是我们按照a建最大生成树 这样话呢我们就可以通过生成树走到尽量多的点啦 然后呢就是从这个子树 ...

  4. BZOJ5415:[NOI2018]归程(可持久化并查集,最短路)

    Description Input Output Sample Input1 14 31 2 50 12 3 100 23 4 50 15 0 23 02 14 13 13 2 Sample Outp ...

  5. 并不对劲的bzoj5415:loj2718:uoj393:p4768:[NOI2018]归程

    题目大意 \(n\)(\(n\leq2*10^5\))个点,\(m\)(\(m\leq4*10^5\))条边的图,每条边有海拔\(a_i(a_i\leq10^9)\).长度\(l_i(l_i\leq1 ...

  6. 【BZOJ5415&UOJ393】归程(Kruskal重构树,最短路)

    题意:From https://www.cnblogs.com/Memory-of-winter/p/11628351.html 思路:先从1开始跑一遍dijkstra,建出kruskal重构树之后每 ...

  7. LOJ.2718.[NOI2018]归程(Kruskal重构树 倍增)

    LOJ2718 BZOJ5415 洛谷P4768 Rank3+Rank1无压力 BZOJ最初还不是一道权限题... Update 2019.1.5 UOJ上被hack了....好像是纯一条链的数据过不 ...

  8. LG4768 [NOI2018]归程

    题意 题目背景 本题因为一些原因只能评测16组数据. 剩下的四组数据:https://www.luogu.org/problemnew/show/U31655 题目描述 本题的故事发生在魔力之都,在这 ...

  9. [NOI2018]归程 kruskal重构树

    [NOI2018]归程 LG传送门 kruskal重构树模板题. 另一篇文章里有关于kruskal重构树更详细的介绍和更板子的题目. 题意懒得说了,这题的关键在于快速找出从查询的点出发能到达的点(即经 ...

随机推荐

  1. 开放下载!2021 解锁 Serverless 从入门到实战大“橙”就

    Serverless 架构即将引领云计算的下一个十年已成行业共识.处于变革中的开发者,大多已从观望状态转向尝试阶段, 越来越多 Serverless 落地场景被解锁. "Serverless ...

  2. HashMap、ConcurrentHashMap红黑树实现分析

    本文学习知识点 1.二叉查找树,以及二叉树查找带来的问题. 2.平衡二叉树及好处. 3.红黑树的定义及构造. 4.ConcurrentHashMap中红黑树的构造. 在正式分析红黑树之前,有必要了解红 ...

  3. 【UE4】基础概念——文件结构、类型、反射、编译、接口、垃圾回收、序列化

    新标签打开或者下载看大图 思维导图 Engine Structure Pipeline Programming Pipeline Blueprint Pipeline

  4. Codeforces1575D

    思路分析 此题采用dfs,注意X选中了之后所有的X值相同,所以需要一个flag来存储X的值. 注意前导0要单独讨论,然后就是当'X'或者'_'在第一位时不能选0,其它位可以选0 - 9 任意一个数. ...

  5. 易维巡APP技术支持

    亲爱的用户 如果您在使用我们的产品时遇到任何问题,请随时与我们联系,我们将全力全意为您解决! 请发邮件与我们联系,我们将24小时为您服务! 电话:18251927768 邮箱地址:xshm999@16 ...

  6. 第二次Alpha Scrum Meeting

    本次会议为Alpha阶段第二次Scrum Meeting会议 会议概要 会议时间:2021年4月24日 会议地点:线上会议 会议时长:30min 会议内容简介:本次会议主要由每个人展示自己目前完成的工 ...

  7. seata代码控制回滚和临时挂起分布式事物

    seata代码控制回滚和临时挂起分布式事物 一.说明 二.功能实现 1.手动回滚分布式事物 2.临时挂起分布式事物 三.完整代码 四 参考链接 一.说明 此处只是简单的记录一下,使用了 Seata后, ...

  8. gson中TypeAdapter实现自定义序列化操作

    最近在项目中遇到这么一个问题,我们后台需要向前端返回一个 json 数据,就是将一个地理位置对象以json的格式返回到前台,但是这个地理位置对象中的经纬度是Double数据类型,项目中规定,如果经纬度 ...

  9. NOIP模拟86(多校19)

    T1 特殊字符串 解题思路 \(f_{i,j}\) 表示前 \(i\) 个字符中结尾为 \(j\) 的最大贡献. 转移枚举当前位置于之前位置结尾的组合加上贡献即可. 对于边界问题,容易发现选择 1 一 ...

  10. Verilog设计技巧实例及实现

    Verilog设计技巧实例及实现 1 引言 最近在刷HDLBits的过程中学习了一些Verilog的设计技巧,在这里予以整理.部分操作可能降低代码的可读性和Debug的难度,请大家根据实际情况进行使用 ...