# [NOI2018] 归程

news/2024/12/27 19:24:46/文章来源:https://www.cnblogs.com/LG017/p/18636577

P4768 [NOI2018] 归程

题目描述

本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定。

魔力之都可以抽象成一个 \(n\) 个节点、\(m\) 条边的无向连通图(节点的编号从 \(1\)\(n\))。我们依次用 \(l,a\) 描述一条边的长度、海拔

作为季风气候的代表城市,魔力之都时常有雨水相伴,因此道路积水总是不可避免的。由于整个城市的排水系统连通,因此有积水的边一定是海拔相对最低的一些边。我们用水位线来描述降雨的程度,它的意义是:所有海拔不超过水位线的边都是有积水的。

Yazid 是一名来自魔力之都的 OIer,刚参加完 ION2018 的他将踏上归程,回到他温暖的家。Yazid 的家恰好在魔力之都的 \(1\) 号节点。对于接下来 \(Q\) 天,每一天 Yazid 都会告诉你他的出发点 \(v\) ,以及当天的水位线 \(p\)

每一天,Yazid 在出发点都拥有一辆车。这辆车由于一些故障不能经过有积水的边。Yazid 可以在任意节点下车,这样接下来他就可以步行经过有积水的边。但车会被留在他下车的节点并不会再被使用。
需要特殊说明的是,第二天车会被重置,这意味着:

  • 车会在新的出发点被准备好。
  • Yazid 不能利用之前在某处停放的车。

Yazid 非常讨厌在雨天步行,因此他希望在完成回家这一目标的同时,最小化他步行经过的边的总长度。请你帮助 Yazid 进行计算。

数据范围与约定

所有测试点均保证 \(T\leq 3\),所有测试点中的所有数据均满足如下限制:

  • \(n\leq 2\times 10^5\)\(m\leq 4\times 10^5\)\(Q\leq 4\times 10^5\)\(K\in\left\{0,1\right\}\)\(1\leq S\leq 10^9\)

  • 对于所有边:\(l\leq 10^4\)\(a\leq 10^9\)

  • 任意两点之间都直接或间接通过边相连。

  • 强制在线

Solution:

kruskal 重构树魅力时刻。

其实如果写过 P4197 Peaks 的话那么这题几乎是纯送的。

先分析题意:

我们先求出原图上以1为起点的单源最短路,然后题目要求我们在一个联通图上求出从一个点 \(u\) 出发只经过满足 $ h > p$ 的边能到达的所有节点 \(v\)\(dis_{v}\) 的最小值。

实现:

我们发现 $ h > p$ 这个条件能通过kruskal重构树来构造.我们建一颗以 \(h\) 构成小根堆的kruskal重构树,叶子节点存的是 \(dis\) 然后对于每次查询,我们从节点 \(u\) 一直倍增向上跳到满足$ h > p$且深度最小的节点 \(u'\) 然后答案就是节点 \(u'\) 子树下的 \(dis\) 的最小值。

至于如何查询 \(u'\) 的子树,这里我选的是在欧拉序上查 st表

Code:

#include<bits/stdc++.h>
const int N=4e5+5;
const int inf=1e9;
const int lg=20;
using namespace std;
int n,m,days,ans;
vector<tuple<int,int> > E[N];
vector<int> e[N<<1];
int val[N],dis[N];
struct Edge{int x,y,w;bool operator <(const Edge &e)const{return w>e.w;}
}q[N];
struct Kruskal{int fa[N],tot;int find(int x){return fa[x]= fa[x]==x ? fa[x] : find(fa[x]);}void add(int x,int y){e[x].emplace_back(y);}void build(){tot=n;for(int u=1;u<=n;u++)fa[u]=u;for(int i=1;i<=m;i++){int x=q[i].x,y=q[i].y,w=q[i].w;int u=find(x),v=find(y);if(u!=v){val[++tot]=w;add(tot,v);add(tot,u);//cout<<"add:"<<tot<<" : "<<u<<" "<<v<<"="<<w<<"\n";fa[tot]=fa[u]=fa[v]=tot;}}}}K;
struct Dijkstra{struct Node{int x,val;bool operator<(const Node &n)const{return n.val<val;}};priority_queue<Node> Q;int vis[N];void init(){for(int i=1;i<=n;i++)dis[i]=inf,vis[i]=0;}void dijksta(int s){init();dis[s]=0;Q.push({s,dis[s]});while(!Q.empty()){int x=Q.top().x;Q.pop();if(vis[x])continue;vis[x]=1;for(auto [y,w] : E[x]){if(dis[y]>dis[x]+w){dis[y]=dis[x]+w;Q.push({y,dis[y]});}}}}
}D;
struct Graph{int dfn[N<<1];int f[N<<1][lg+5];int st[N<<1],ed[N<<1];void dfs(int x,int fa){st[x]=++dfn[0];f[x][0]=fa;for(int j=1;j<=lg;j++)f[x][j]=f[f[x][j-1]][j-1];for(auto y : e[x]){if(y==fa)continue;dfs(y,x);}ed[x]=dfn[0];}int find(int x,int k){for(int j=lg;j>=0;j--)if(val[f[x][j]]>k)x=f[x][j];return x;}
}G;
struct ST{int LG[N<<1];int st[N<<1][lg+5];int R;void init(){R=(n<<1)-1;for(int i=2;i<=R;i++)LG[i]=LG[i>>1]+1;for(int i=1;i<=R;i++)st[i][0]=inf;for(int i=1;i<=n;i++)st[G.st[i]][0]=dis[i];}void build(){init();//cout<<"R:"<<R<<"\n";//for(int i=1;i<=R;i++)cout<<st[i][0]<<(i==R ? "\n" : " ");for(int j=1;j<=lg;j++)for(int i=1;i<=R;i++){int tmp=min(i+(1<<j-1),R);st[i][j]=min(st[i][j-1],st[tmp][j-1]);}}int query(int l,int r){int k=LG[r-l+1];return min(st[l][k],st[r-(1<<k)+1][k]);}
}S;
struct Change{int k,s;int chage_v(int x){return (x+k*ans-1)%n+1;}int chage_p(int x){return (x+k*ans)%(s+1);}
}C;
void Clear()
{int R=(n<<1)-1;G.dfn[0]=0;for(int i=1;i<=n;i++)E[i].clear();for(int i=1;i<=R;i++)e[i].clear(),val[i];
}
void work()
{cin>>n>>m;ans=0;for(int i=1,x,y,w,h;i<=m;i++){scanf("%d%d%d%d",&x,&y,&w,&h);E[x].emplace_back(y,w);E[y].emplace_back(x,w);q[i]={x,y,h};}sort(q+1,q+1+m);D.dijksta(1);K.build();G.dfs(K.tot,0);S.build();cin>>days>>C.k>>C.s;for(int i=1,v,p;i<=days;i++){scanf("%d%d",&v,&p);v=C.chage_v(v);p=C.chage_p(p);//cout<<"v p : "<<v<<" "<<p<<"\n";v=G.find(v,p);ans=S.query(G.st[v],G.ed[v]);//cout<<v<<"="<<G.st[v]<<" "<<G.ed[v]<<"\n";printf("%d\n",ans);}//cout<<"END\n";Clear();
}
int main()
{//freopen("P4768_2.in","r",stdin);freopen("P4768.out","w",stdout);int T;cin>>T;while(T--)work();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859999.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git review错误: is not registered in your account, and you lack forge committer permission

肉眼看上去,远端的邮箱和自己输入的邮箱是一致的 罪魁祸首是 git commit --amend 里面的邮箱带了中文引号,导致本地和远端邮箱名称不一致 从git review 命令报错email address那一行的奇怪字符可以看出端倪如上图所示,引号不是标准的linux字符

2.1基本选择器

选择器: 作用:选择页面上的某一个或者某一类元素 2.1基本选择器:1.标签选择器:选择一类标签 2.类选择器 class:选中所有class属性一致的标签(可以跨标签) .class名称{} 3.id选择器:id全局唯一 #id名称{} 不遵循就近原则:id>class>标签

痞子衡嵌入式:MCUXpresso for VS Code开发环境搭建及SDK工程导入

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是MCUXpresso for VS Code开发环境搭建及SDK工程导入。MCUXpresso IDE(包括其前身 LPCXpresso IDE、Kinetis Design Studio)是恩智浦软件团队持续开发了十多年的免费集成开发环境,现在功能已经相当完善,IDE…

3.选择器

选择器: 作用:选择页面上的某一个或者某一类元素 3.1基本选择器:1.标签选择器:选择一类标签 2.类选择器 class:选中所有class属性一致的标签(可以跨标签) .class名称{} 3.id选择器:id全局唯一 #id名称{} 不遵循就近原则:id>class>标签

2.CSS的三种导入方式

1.标签内部 2.head里面 3.css文件 1.链接式:html2.导入式:CSS2.1特有 优先级:行内样式>内部样式=外部样式(后导入的覆盖前导入的--就近原则)

谷歌Pixel 2 刷安卓10系统 APatch获取Root权限

事前准备手机需要解Bootloader锁 , 打开OEM解锁,开启USB调试链接电脑下载Platform-Tools # 地址 https://developer.android.google.cn/tools/releases/platform-tools?hl=zh-cn检查是否需要需要安装Android驱动刷机下载先刷机包 https://developers.google.cn/android/image…

六、汇编实战

打印:hello world 在屏幕上输出字符 mov dl,a ; 将要打印的字符放到dl中 mov ah, 02h ; 设置显示字符的功能号 int 21h ; 调用DOS中断,打印字符在屏幕上输出字符串 mov ah,09h ;设置显示字符串的功能号 int 21H …

可信执行环境

一、隐私计算与可信执行环境 1. 背景:随着云计算和大数据的普及,用户之间需要进行隐私数据的共享与协作,这些数据被上传到云端进行计算和处理。 但是,由于隐私数据交由不可信的第三方存储和管理,用户隐私数据面临被泄露的风险,公民的生命和财产安全乃至国家的安全都受到不…

Foldermove 轻松地把电脑里的软件搬到另一个硬盘,甚至是U盘里

Foldermove 大家好,今天我要介绍一个超实用的小工具,它能让你轻松地把电脑里的软件搬到另一个硬盘,甚至是U盘里,听起来是不是很酷? ●软件简介 软件名:FolderMove 体积:只有201kb,轻得像羽毛。 版本:v3.0 适用系统:Windows ●使用体验 这个小工具,体积小到几乎可以…

ping 工具的使用

一、ping基本使用详解在网络中ping是一个十分强大的TCP/IP工具。它的作用主要为:1、用来检测网络的连通情况和分析网络速度2、根据域名得到服务器IP3、根据ping返回的TTL值来判断对方所使用的操作系统及数据包经过路由器数量。 bytes值:数据包大小,也就是字节。 time值:响…

二维、三维组件融合 720三维全景沉浸式实景体验

本系统通过数字孪生技术,实现小区楼盘系统的可视化展示,整合楼盘内各个系统的数据源,将楼盘模型与房间模型、720三维全景图相结合,实现了从楼盘周边到室内布局的全方位展示,为购房者提供全方位的可视化信息。整个项目分为四个功能模块,分别为楼盘概览、楼盘规划、归家动线…

2024-2025-1 20241318 《计算机基础与程序设计》第十四周学习总结

这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP(这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14这个作业的目标 <学习《C语言程序设计》第13-14章并完成云班课测试>作业正文 https://i.cnblogs.com/posts/edi…