[NOI2018]归程

题面太长辣,戳这里

模拟赛上写了一个spfa (关于spfa,它已经死了),然后一个st表水完暴力跑路。考后说是Kruscal重构树或者可持久化并查集???这都是些什么东西。不过还是填一下这个坑。

STO YZK IOI2020捧杯<---学习笔记

然后自己yy写了重构树,感觉代码还算优美??吧

数组又又又又又又又又又开小了,dis数组也要开2*N。

#include<bits/stdc++.h>
#define Min(a,b) (a)<(b)?(a):(b)
#define lll long long
using namespace std;
int read()
{
int x=0,w=1;char ch=getchar();
while(ch>'9'||ch<'0') {if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return x*w;
}
const int N=400010;
int n,m,cnt,x,y,z,c,Q,zyys,s;lll asd,zxc,last;
int head[2*N];
bool vis[N];
int fa[2*N],deep[2*N],f[20][2*N];
lll dp[2*N],dis[N],v[2*N];
struct node{
lll v,to,next,h;
}edge[4*N];
struct Node{
int x,y,v,h;
}a[2*N];
void add(int x,int y,int z,int c)
{
cnt++;edge[cnt].to=y;edge[cnt].v=z;edge[cnt].h=c;
edge[cnt].next=head[x];head[x]=cnt;
}
priority_queue<pair<lll,int> >q;
bool cmp(Node p,Node q){return p.h>q.h;}
int gfa(int x){if(x==fa[x])return x;return fa[x]=gfa(fa[x]);}
void dijkstra()
{
memset(dis,0x3f,sizeof(dis));memset(vis,0,sizeof(vis));
q.push(make_pair(0,1));dis[1]=0;
while(q.size())
{
int u=q.top().second;q.pop();
if(vis[u]==true)continue;vis[u]=1;
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].to;
if(dis[v]>dis[u]+edge[i].v)
dis[v]=dis[u]+edge[i].v,q.push(make_pair(-dis[v],v));
}
}
}
void dfs(int k,int father)
{
dp[k]=dis[k];
for(int i=head[k];i;i=edge[i].next)
{
int v=edge[i].to;if(v==father)continue;
deep[v]=deep[k]+1;f[0][v]=k;dfs(v,k);
dp[k]=Min(dp[k],dp[v]);
}
}
void init()
{
for(int i=1;i<=19;i++)for(int j=1;j<=n;j++)
f[i][j]=f[i-1][f[i-1][j]];
}
int lca(int x,lll y)
{
for(int i=19;i>=0;i--)
{
if(v[f[i][x]]>y) x=f[i][x];
}
return x;
}
int main()
{
int t=read();
while(t--)
{
n=read();m=read();int nn=n;
cnt=0;memset(head,0,sizeof(head));
for(int i=1;i<=m;i++)
{
x=read();y=read();z=read();c=read();
add(x,y,z,c);add(y,x,z,c);
a[i].x=x;a[i].y=y;a[i].v=z;a[i].h=c;
}
dijkstra();
cnt=0;memset(head,0,sizeof(head));
for(int i=1;i<=n;i++) fa[i]=i;
sort(a+1,a+1+m,cmp);
for(int i=1;i<=m;i++)
{
int xx=gfa(a[i].x),yy=gfa(a[i].y);
if(xx==yy)continue;
n++;fa[n]=n;fa[xx]=n;fa[yy]=n;v[n]=a[i].h;
add(n,xx,v[n],0);add(xx,n,v[n],0);add(n,yy,v[n],0);add(yy,n,v[n],0);
}
deep[n]=1;dfs(n,0);init();
Q=read();zyys=read();s=read();last=0;
for(int i=1;i<=Q;i++)
{
asd=read();zxc=read();
asd=(asd+zyys*last-1)%nn+1;zxc=(zxc+zyys*last)%(s+1);
last=dp[lca(asd,zxc)];
printf("%lld\n",last);
}
}
}

[NOI2018]归程(kruscal重构树)的更多相关文章

  1. 洛谷$P4768\ [NOI2018]$归程 $kruscal$重构树

    正解:$kruscal$重构树 解题报告: 传送门$QwQ$ 语文不好选手没有人权$TT$连题目都看不懂真的要哭了$kk$ 所以先放个题目大意?就说给定一个$n$个点,$m$条边的图,每条边有长度和海 ...

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

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

  3. [NOI2018]归程 kruskal重构树

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

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

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

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

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

  6. BZOJ 5415: [Noi2018]归程(kruskal重构树)

    解题思路 \(NOI2018\)的\(Day1\) \(T1\),当时打网络赛的时候不会做.学了一下\(kruskal\)重构树后发现问题迎刃而解了.根据\(kruskal\)的性质,如果要找从\(u ...

  7. 洛谷P4768 [NOI2018]归程(Kruskal重构树)

    题意 直接看题目吧,不好描述 Sol 考虑暴力做法 首先预处理出从$1$到每个节点的最短路, 对于每次询问,暴力的从这个点BFS,从能走到的点里面取$min$ 考虑如何优化,这里要用到Kruskal重 ...

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

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

  9. 学习笔记:Kruscal 重构树

    网上感觉没有什么很详细 + 证明的讲解啊) 前置:Kruskal 求最小生成树. 这个算法可以将一棵树 / 无向连通图重构成一颗有性质的新树. 算法可以解决一些树上瓶颈边权之类的问题,可以把需要持久化 ...

随机推荐

  1. C# DataTable 增加行与列

    亲测有用的方法 DataTable AllInfos = new DataTable();//生成一个表格 DataColumn typeColumn = new DataColumn();//建一个 ...

  2. 一、基础篇--1.1Java基础-抽象类和接口的区别

    抽象类和接口的区别 抽象类和接口在设计层面的区别主要体现在:接口是对动作的抽象,抽象类是对根源.类的抽象.抽象类表示的是,这个对象是什么,接口表示的是,这个对象可以做什么. 比如,男人.女人是人,人是 ...

  3. 清北学堂2019.7.18 & 清北学堂2019.7.19

    Day 6 钟皓曦 经典题目:石子合并 可以合并任意两堆,代价为数量的异或(^)和 f[s]把s的二进制所对应石子合并成一堆所花代价 枚举s的子集 #include<iostream> u ...

  4. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第4节 maven生命周期和概念模型图_09maven概念模型图

    项目自身的信息 项目运行所依赖的扎包 运行环境信息:tomcat啊,JDK啊这些都属于运行环境 一个jar包的坐标由三个最基本的信息组成. 第一部分就是依赖管理. 第二个部分

  5. 【工具安装】kali linux 安装教程

    日期:2019-07-14 16:36:21 介绍:使用最新版的 VMware 来安装 kali linux 0x01.下载镜像 首先需要安装 VMware,安装步骤点这里. VMware 安装教程 ...

  6. 移动端自动化==>AppiumApi接口详解

    Appium 初始化配置信息(Desired Capabilities) Desired Capabilities实际上就是一个字典,它主要用于向Appium Server提供初始化配置参数,如:想要 ...

  7. 网易云课堂_C++程序设计入门(下)_第8单元:年年岁岁花相似– 运算符重载_第8单元 - 作业2:OJ编程 - 重载数组下标运算符

    第8单元 - 作业2:OJ编程 - 重载数组下标运算符 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提 ...

  8. Activity启动流程(三)

    这里对启动Activity过程中涉及到的ActivityStack.TaskRecord.ActivityRecord.ActivityStackSupervisor进行简单的分析,实际上一张时序图就 ...

  9. 工具类分享之获取Request/Response工具类《RequestContextHolderUtil》

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/aiyaya_/article/details/78975893前言在开发spring web项目时, ...

  10. SHELL输出颜色和闪烁控制

    Shell 颜色和闪烁控制 在Shell下有时候需要定制输出,比如给输出加上颜色,或者显示高亮,或者添加闪烁等. 然后这些颜色代码或者控制码等相对不好记住.这个时候我们可以考虑把最终想要的结果制定成对 ...