[bzoj5415]归程
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]归程的更多相关文章
- BZOJ5415[Noi2018]归程——kruskal重构树+倍增+堆优化dijkstra
题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l,a 描述一条边的长度.海 ...
- 【BZOJ5415】【NOI2018】归程(克鲁斯卡尔重构树)
[NOI2018]归程(克鲁斯卡尔重构树) 题面 洛谷 题解 我在现场竟然没有把这道傻逼题给切掉,身败名裂. 因为这题就是克鲁斯卡尔重构树的模板题啊 我就直接简单的说一下把 首先发现答案就是在只经过海 ...
- BZOJ5415 [NOI2018] 归程
今天也要踏上归程了呢~(题外话 kruskal重构树!当时就听学长们说过是重构树辣所以做起来也很快233 就是我们按照a建最大生成树 这样话呢我们就可以通过生成树走到尽量多的点啦 然后呢就是从这个子树 ...
- 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 ...
- 并不对劲的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 ...
- 【BZOJ5415&UOJ393】归程(Kruskal重构树,最短路)
题意:From https://www.cnblogs.com/Memory-of-winter/p/11628351.html 思路:先从1开始跑一遍dijkstra,建出kruskal重构树之后每 ...
- LOJ.2718.[NOI2018]归程(Kruskal重构树 倍增)
LOJ2718 BZOJ5415 洛谷P4768 Rank3+Rank1无压力 BZOJ最初还不是一道权限题... Update 2019.1.5 UOJ上被hack了....好像是纯一条链的数据过不 ...
- LG4768 [NOI2018]归程
题意 题目背景 本题因为一些原因只能评测16组数据. 剩下的四组数据:https://www.luogu.org/problemnew/show/U31655 题目描述 本题的故事发生在魔力之都,在这 ...
- [NOI2018]归程 kruskal重构树
[NOI2018]归程 LG传送门 kruskal重构树模板题. 另一篇文章里有关于kruskal重构树更详细的介绍和更板子的题目. 题意懒得说了,这题的关键在于快速找出从查询的点出发能到达的点(即经 ...
随机推荐
- C++中string和char字符串的异同与使用方法
C++中string和char声明字符串的异同和使用 string类 必须在头文件中包含<string> 隐藏了字符串的数组性质,可以像处理普通变量那样处理字符串 string类位于名称空 ...
- Multidimension Tools(多维工具)
多维工具 # Process: 创建 NetCDF 栅格图层 arcpy.MakeNetCDFRasterLayer_md("", "", "&quo ...
- 【c++ Prime 学习笔记】第1章 开始
1.1 编写一个简单的程序 int main() { return 0; } 函数 包含4部分: 返回类型(return type) 函数名(function name) 形参列表(parameter ...
- 软件工程个人博客作业-软件案例分析:VS与VS Code
项目 内容 本作业属于北航 2020 年春软件工程 博客园班级连接 本作业是本课程个人项目作业 作业要求 我在这个课程的目标是 提高软件开发能力.团队协作能力 这个作业在哪个具体方面帮助我实现目标 提 ...
- GT考试
比较神仙的$dp+KMP+Matrix$综合题目,比较值得一写 $0x00$:首先我打了一个爆搜 不过对正解并无任何启发...(逗比发言请忽略) $0x01$:基础$dp$ 状态还是比较好设的, 考虑 ...
- Linux基础是零基础必须要过的关,你懂了多少
#LINUX基础学习 ##命令行下的基础知识 Linux区分英文的大小写. date :查看时间 cal:查看日历 [Tab] 热键 :可以自动补全命令名和文件名 [Ctrl]+C 热键 :可以中断正 ...
- 洛谷 P5665 [CSP-S2019] 划分
链接: P5665 题意: 给出 \(n\) 个整数 \(a_i\) ,你需要找到一些分界点 \(1 \leq k_1 \lt k_2 \lt \cdots \lt k_p \lt n\),使得 \( ...
- 【做题记录】 [JLOI2011]不等式组
P5482 [JLOI2011]不等式组 超烦人的细节题!(本人调了两天 QAQ ) 这里介绍一种只用到一只树状数组的写法(离线). 树状数组的下标是:所有可能出现的数据进行离散化之后的值. 其含义为 ...
- MyBatis源码分析(七):动态代理(Mybatis核心机制)
一.动态代理 动态代理是一种比较高级的代理模式,它的典型应用就是Spring AOP. 在传统的动态代理模式中,客户端通过ProxySubject调用RealSubject类的request( )方法 ...
- MyBatis源码分析(四):SQL执行过程分析
一.获取Mapper接口的代理 根据上一节,Mybatis初始化之后,利用sqlSession(defaultSqlSession)的getMapper方法获取Mapper接口 1 @Override ...