BZOJ5415 [NOI2018] 归程
今天也要踏上归程了呢~(题外话
kruskal重构树!当时就听学长们说过是重构树辣所以做起来也很快233
就是我们按照a建最大生成树 这样话呢我们就可以通过生成树走到尽量多的点啦
然后呢就是从这个子树内走到1的最短路 提前处理出来然后就是子树最小值啦w
附代码。(些许丑陋(
//Love and Freedom.
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<queue>
#define ll long long
#define inf 20021225
#define N 400010
#define M 800010
using namespace std;
struct edge{int x,y,v;}g[M];
struct edg{int to,lt,v;}e[M],t[N];
struct node
{
int id,v;
node(){}
node(int _id,int _v){id=_id,v=_v;}
};
bool operator <(node a,node b){return a.v>b.v;}
priority_queue<node> q;
int cnt,in[N];
void add(int x,int y,int l,int a)
{
e[++cnt].to=y; e[cnt].lt=in[x]; e[cnt].v=l; in[x]=cnt;
e[++cnt].to=x; e[cnt].lt=in[y]; e[cnt].v=l; in[y]=cnt;
g[cnt>>].x=x; g[cnt>>].y=y; g[cnt>>].v=a;
}
void tree(int x,int y)
{
t[++cnt].to=y; t[cnt].lt=in[x]; in[x]=cnt;
}
int bel[N],n,val[N],m; bool vis[N];
int find(int x)
{
//printf("%d %d\n",x,bel[x]);
if(bel[x]==x) return x;
return bel[x]=find(bel[x]);
}
void dijkstra()
{
memset(vis,,sizeof(vis));
memset(val,,sizeof(val)); val[]=;
q.push(node(,val[]));
while(!q.empty())
{
node tmp = q.top(); q.pop();
if(vis[tmp.id]) continue;
vis[tmp.id]=; int x=tmp.id;
for(int i=in[x];i;i=e[i].lt)
{
int y=e[i].to; if(val[y]>val[x]+e[i].v)
val[y]=val[x]+e[i].v,q.push(node(y,val[y]));
}
}
}
bool cmp(edge x,edge y){return x.v>y.v;}
int poi;
int mn[N],f[N][];
void kruskal()
{
//memset(bel,0,sizeof(bel));
sort(g+,g+m+,cmp); memset(mn,,sizeof(mn));
memset(in,,sizeof(in)); cnt=; poi=n;
for(int i=;i<=m;i++)
{
int x=g[i].x,y=g[i].y;
int fx=find(x),fy=find(y);
if(fx==fy) continue;
val[++poi]=g[i].v;
tree(poi,fx); tree(poi,fy);
bel[fx]=bel[fy]=poi;
}
}
void dfs(int x)
{
vis[x]=;
for(int i=;i<;i++)
f[x][i]=f[f[x][i-]][i-];
for(int i=in[x];i;i=t[i].lt)
{
int y=t[i].to; f[y][]=x;
dfs(y); mn[x]=min(mn[x],mn[y]);
}
if(x<=n) mn[x]=val[x];
}
int getans(int x,int w)
{
for(int i=;~i;i--)
if(val[f[x][i]]>w) x=f[x][i];
//printf("%d\n",val[x]);
return mn[x];
}
int main()
{
int T;scanf("%d",&T);
while(T--)
{
memset(in,,sizeof(in)); cnt=;
scanf("%d%d",&n,&m); int u,v,l,a;
for(int i=;i<=*n;i++) bel[i]=i;
for(int i=;i<=m;i++)
{
scanf("%d%d%d%d",&u,&v,&l,&a);
add(u,v,l,a);
}
dijkstra(); kruskal(); memset(vis,,sizeof(vis));
for(int i=;i<*n;i++) if(!vis[i]) dfs(find(i));
int Q,k,s,lastans=,p;
scanf("%d%d%d",&Q,&k,&s); val[]=;
while(Q--)
{
scanf("%d%d",&v,&p);
v=(v+k*lastans-)%n+; p=(p+k*lastans)%(s+);
printf("%d\n",lastans=getans(v,p));
}
} return ;
}
BZOJ5415 [NOI2018] 归程的更多相关文章
- BZOJ5415[Noi2018]归程——kruskal重构树+倍增+堆优化dijkstra
题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l,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 ...
- [NOI2018]归程 kruskal重构树
[NOI2018]归程 LG传送门 kruskal重构树模板题. 另一篇文章里有关于kruskal重构树更详细的介绍和更板子的题目. 题意懒得说了,这题的关键在于快速找出从查询的点出发能到达的点(即经 ...
- [洛谷P4768] [NOI2018]归程 (kruskal重构树模板讲解)
洛谷题目链接:[NOI2018]归程 因为题面复制过来有点炸格式,所以要看题目就点一下链接吧\(qwq\) 题意: 在一张无向图上,每一条边都有一个长度和海拔高度,小\(Y\)的家在\(1\)节点,并 ...
- NOI2018 D1T1 [NOI2018]归程 解题报告
P4768 [NOI2018]归程 题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 \(n\) 个节点.\(m\) 条边的无向连通图(节点的编号从 \ ...
- BZOJ_5415_[Noi2018]归程_kruscal重构树+倍增+最短路
BZOJ_5415_[Noi2018]归程_kruscal重构树+倍增 Description www.lydsy.com/JudgeOnline/upload/noi2018day1.pdf 好久不 ...
- 题解 NOI2018 归程
题解 NOI2018 归程 题意 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 n 个节点.m 条边的无向连通图(节点的编号从 1 至 n).我们依次用 l, ...
- [NOI2018]归程(kruscal重构树)
[NOI2018]归程 题面太长辣,戳这里 模拟赛上写了一个spfa (关于spfa,它已经死了),然后一个st表水完暴力跑路.考后说是Kruscal重构树或者可持久化并查集???这都是些什么东西.不 ...
- [luogu4768] [NOI2018] 归程 (Dijkstra+Kruskal重构树)
[luogu4768] [NOI2018] 归程 (Dijkstra+Kruskal重构树) 题面 题面较长,这里就不贴了 分析 看到不能经过有积水的边,即不能经过边权小于一定值的边,我们想到了kru ...
随机推荐
- FastDFS介绍(一)
1.简介 FastDFS对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载.文件删除)等,解决了大容量文件存储的问题,特别适合以文件为载体的在线服务,如相册网站.文档网站.图片 ...
- docker运行spring boot 包镜像出现no main manifest attribute问题
问题: 在进行docker部署的时候,开始对项目进行打包,在启动该镜像时 [root@topcheer docker]# docker run -it 00494e3d4550no main mani ...
- 2、投资之基金 - IT人思维之投资
笔者曾经对基金进行投资,但是当时对基金不是很了解,只是为了投资而去投资.现在,笔者对基金的投资有了更深入的了解认识,所以就有了本文. 基金投资在国内还是挺流行的,虽然其是从国外引进来的概念经验,但是国 ...
- linux发版
使用MobaXterm_v8.5 1.upload需要更换的文件 2.关闭Tomcat cd /usr/local/tomcat/apache-tomcat-6.0.30-pcitcaly/ ...
- Java实践-远程调用Shell脚本并获取输出信息
1.添加依赖 <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-s ...
- python cv2在验证码识别中的使用
使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数,读入一副彩色图 ...
- Bing Beats Google for the Best Way to X-Ray Search LinkedIn
Bing Beats Google for the Best Way to X-Ray Search LinkedIn 11/13/11 Note: I’ve provided some update ...
- Latex数学公式中的矩阵
目录 矩阵的括号形式 array环境 上三角矩阵 分块矩阵 行内矩阵 矩阵的括号形式 使用matrix.pmatrix.bmatrix.Bmatrix.vmatrix或者Vmatrix环境: $$ \ ...
- 前后端分离及React的一些研究
前言 在对英才网企业线前端不断的完善过程中,我们尝试进行了前后端分离,引入Node环境.以及在使用React的过程中,自行开发DOM渲染框架,解决React兼容低版本IE的问题,在这个过程中,我们有了 ...
- spring cloud网关gateway
spring gateway使用基于netty异步io,第二代网关:zuul 1使用servlet 3,第一代网关,每个请求一个线程,同步Servlet,多线程阻塞模型.而spring貌似不想在支持z ...