今天也要踏上归程了呢~(题外话

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] 归程的更多相关文章

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

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

  2. 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 ...

  3. [NOI2018]归程 kruskal重构树

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

  4. [洛谷P4768] [NOI2018]归程 (kruskal重构树模板讲解)

    洛谷题目链接:[NOI2018]归程 因为题面复制过来有点炸格式,所以要看题目就点一下链接吧\(qwq\) 题意: 在一张无向图上,每一条边都有一个长度和海拔高度,小\(Y\)的家在\(1\)节点,并 ...

  5. NOI2018 D1T1 [NOI2018]归程 解题报告

    P4768 [NOI2018]归程 题目描述 本题的故事发生在魔力之都,在这里我们将为你介绍一些必要的设定. 魔力之都可以抽象成一个 \(n\) 个节点.\(m\) 条边的无向连通图(节点的编号从 \ ...

  6. BZOJ_5415_[Noi2018]归程_kruscal重构树+倍增+最短路

    BZOJ_5415_[Noi2018]归程_kruscal重构树+倍增 Description www.lydsy.com/JudgeOnline/upload/noi2018day1.pdf 好久不 ...

  7. 题解 NOI2018 归程

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

  8. [NOI2018]归程(kruscal重构树)

    [NOI2018]归程 题面太长辣,戳这里 模拟赛上写了一个spfa (关于spfa,它已经死了),然后一个st表水完暴力跑路.考后说是Kruscal重构树或者可持久化并查集???这都是些什么东西.不 ...

  9. [luogu4768] [NOI2018] 归程 (Dijkstra+Kruskal重构树)

    [luogu4768] [NOI2018] 归程 (Dijkstra+Kruskal重构树) 题面 题面较长,这里就不贴了 分析 看到不能经过有积水的边,即不能经过边权小于一定值的边,我们想到了kru ...

随机推荐

  1. CF613D Kingdom and its Cities 虚树 + 树形DP

    Code: #include<bits/stdc++.h> #define ll long long #define maxn 300003 #define RG register usi ...

  2. 循序渐进实现仿QQ界面(一):园角矩形与双缓冲贴图窗口

    印象里仿QQ界面的程序应该有很多,搜了一下,虽然出来一大堆,排除了重复的,却只有两三个,没我想象的好.经常看到CSDN上有人问,QQ这个功能怎么实现,那个界面怎么实现,归纳了一下,决定写这么一个仿QQ ...

  3. 攻防世界 | level0

    先反编译 : int __cdecl main(int argc, const char **argv, const char **envp) { write(1, "Hello, Worl ...

  4. SecondModel 实现类

    package com.test.mvp.mvpdemo.mvp.v6.model; import com.test.mvp.mvpdemo.mvp.v6.SecondContract;import ...

  5. 这才是Tomcat内存配置的正确姿势

    1.背景 虽然阅读了各大牛的博客或文章,但并没有找到特别全面的关于JVM内存分配方法的文章,很多都是复制黏贴 为了严谨,本文特别备注只介绍基于HotSpot VM虚拟机,并且基于JDK1.7的内存分配 ...

  6. keras:InternalError: Failed to create session

    如题,keras出现以上错误,解决办法: 找到占用gpu的进程: nvidia-smi -q 杀死这些进程即可: xxxxx

  7. Jquery浅析

    目录 jquery 通过jquery改变标签字体颜色 jquery和js对象之间值转化 Jquery基本选择器 Jquery层级选择器 基本筛选器 操作类属性 模太框 表单筛选器 筛选器方法 设置多个 ...

  8. python 微服务方案

    介绍 使用python做web开发面临的一个最大的问题就是性能,在解决C10K问题上显的有点吃力.有些异步框架Tornado.Twisted.Gevent 等就是为了解决性能问题.这些框架在性能上有些 ...

  9. SVG绘制多个圆

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. poj3669 Meteor Shower (宽度优先搜索)

    Description - 题目描述 Bessie听说有场史无前例的流星雨即将来临:有谶言:陨星将落,徒留灰烬.为保生机,她誓将找寻安全之所(永避星坠之地).目前她正在平面坐标系的原点放牧,打算在群星 ...