题面

清新友好的题目

跑一个最短路,然后对海拔建Kruskal重构树,从最后接上去的边(最低的一个)开始DFS一下处理子树里路程的最小值。

询问是每次在重构树上倍增找到深度最浅的海拔高于当天水位线的节点,其子树内的点必定可以通过乘车互相到达。

 #include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,M=,X=,inf=2e9;
struct a
{
int x,y,s;
}mst[N];
struct b{int node,dist;};
bool operator < (b x,b y)
{
return x.dist>y.dist;
}
priority_queue<b> hp;
int p[N],noww[M],goal[M],val[M];
int P[N],Noww[M],Goal[M],mul[N][X];
int vis[N],dis[N],aset[N],elev[N],mind[N];
int n,m,T,Q,S,K,t1,t2,t3,t4,cnt,Cnt,tot,ans;
bool cmp(a x,a y)
{
return x.s>y.s;
}
int Finda(int x)
{
return x==aset[x]?x:aset[x]=Finda(aset[x]);
}
void Link(int f,int t,int v)
{
noww[++cnt]=p[f],p[f]=cnt;
goal[cnt]=t,val[cnt]=v;
noww[++cnt]=p[t],p[t]=cnt;
goal[cnt]=f,val[cnt]=v;
}
void Linka(int f,int t)
{
Noww[++Cnt]=P[f];
Goal[Cnt]=t,P[f]=Cnt;
Noww[++Cnt]=P[t];
Goal[Cnt]=f,P[t]=Cnt;
}
void Init()
{
memset(p,,sizeof p);
memset(P,,sizeof P);
memset(mul,,sizeof mul);
memset(vis,,sizeof vis);
memset(dis,0x3f,sizeof dis);
for(int i=;i<=n;i++) aset[i]=i;
cnt=Cnt=ans=,tot=n,dis[]=,hp.push((b){,});
}
void Dijkstra()
{
while(!hp.empty())
{
b tt=hp.top(); hp.pop(); int tn=tt.node;
if(vis[tn]) continue; vis[tn]=true;
for(int i=p[tn];i;i=noww[i])
if(dis[goal[i]]>dis[tn]+val[i])
{
dis[goal[i]]=dis[tn]+val[i];
hp.push((b){goal[i],dis[goal[i]]});
}
}
}
void DFS(int nde,int fth)
{
mul[nde][]=fth;
for(int i=;mul[nde][i-];i++)
mul[nde][i]=mul[mul[nde][i-]][i-];
mind[nde]=(nde<=n)?dis[nde]:inf;
for(int i=P[nde];i;i=Noww[i])
if(Goal[i]!=fth)
{
DFS(Goal[i],nde);
if(mind[Goal[i]]<mind[nde])
mind[nde]=mind[Goal[i]];
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m),Init();
for(int i=;i<=m;i++)
{
scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
mst[i]=(a){t1,t2,t4},Link(t1,t2,t3);
}
Dijkstra(),sort(mst+,mst++m,cmp);
for(int i=;i<=m;i++)
{
int tx=Finda(mst[i].x),ty=Finda(mst[i].y),ts=mst[i].s;
if(tx!=ty)
{
elev[++tot]=ts,aset[tot]=aset[tx]=aset[ty]=tot;
Linka(tx,tot),Linka(ty,tot);
}
}
DFS(tot,),scanf("%d%d%d",&Q,&K,&S);
while(Q--)
{
scanf("%d%d",&t1,&t2);
t1=(t1+K*ans-)%n+,t2=(t2+K*ans)%(S+);
for(int i=;~i;i--)
if(elev[mul[t1][i]]>t2) t1=mul[t1][i];
printf("%d\n",ans=mind[t1]);
}
}
return ;
}

解题:NOI 2018 归程的更多相关文章

  1. [LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程

    [LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程 题意 给定一张无向图, 每条边有一个距离和一个高度. 再给定 \(q\) 组可能在线的询问, 每组询问给定一个点 ...

  2. [NOI 2018] 归程

    Description 传送门 Solution 65分做法 先求出每个点到\(1\)号点的最短路,记为\(d[i]\).然后按照海拔从大到小依次加边,并查集维护每个连通块中\(d[i]\)的最小值, ...

  3. NOI 2018 归程 (Kruskal重构树)

    题目大意:太长了,略 Kruskal重构树,很神奇的一个算法吧 如果两个并查集被某种条件合并,那么这个条件作为一个新的节点连接两个并查集 那么在接下来的提问中,如果某个点合法,它的所有子节点也都合法, ...

  4. [LOJ 2720][BZOJ 5417][UOJ 395][NOI 2018]你的名字

    [LOJ 2720][BZOJ 5417][UOJ 395][NOI 2018]你的名字 题意 给定一个大串 \(S\) 以及 \(q\) 次询问, 每次询问给定一个串 \(T\) 和区间 \([l, ...

  5. NOI 2018 酱油记

    转眼离 NOI 2018 已经过了一个星期了,退役的我还是随便来水水吧. 语法.错字之类的可能会很多,但是我也不拘这点小节了. 恭喜 yww, zjt, sk 进队,zwl, myh au , yay ...

  6. [LOJ 2721][UOJ 396][BZOJ 5418][NOI 2018]屠龙勇士

    [LOJ 2721][UOJ 396][BZOJ 5418][NOI 2018]屠龙勇士 题意 题面好啰嗦啊直接粘LOJ题面好了 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照 ...

  7. NOI Day1T1归程(Kruskal重构树+Dijkstra)

    NOI Day1T1归程(Kruskal重构树+Dijkstra) 题目 洛谷题目传送门 题解 其实我不想写......,所以...... 挖个坑......我以后一定会补的 luogu的题解讲的还是 ...

  8. 【NOI 2018】归程(Kruskal重构树)

    题面在这里就不放了. 同步赛在做这个题的时候,心里有点纠结,很容易想到离线的做法,将边和询问一起按水位线排序,模拟水位下降,维护当前的各个联通块中距离$1$最近的距离,每次遇到询问时输出所在联通块的信 ...

  9. 「NOI 2018」归程「Kruskal 重构树」

    题解 Kruskal重构树:每次一条边连接两个集合,建一个新点,点权为该边边权:把这两个集合的根连向新点. 性质:(如果求的是最大生成树)叶子结点是图中实际结点:叶子到根路径上点权递减:两点间lca的 ...

随机推荐

  1. kettle学习笔记(一)——入门与安装

    一.概述 1.kettle是什么 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,绿色无需安装,数据抽取高效稳定.中文名称叫水壶,该项目的主程序 ...

  2. powersheel远程连接方法操作

    powersheel远程连接密码加密连接高级玩法 ConvertTo-SecureString 和 ConvertFrom-SecureString 命令都支持选项 -Key.在处理密码时通过使用 K ...

  3. 架构师修练 I - 超级代码控

    可实现的是架构,空谈是概念 So don't tell me the concepts show me the code!  “不懂编码的架构师不是好架构师” 好架构师都是超级代码控.   代码是最好 ...

  4. mybati缓存机制之一级缓存

      在月黑风高的某天夜晚,boss chen语重心长的发条了消息给小草说:“小草啊,是时候写写博客来记录平常自己积累的东西了......”.小草一听,平常没有写博客的习惯,在平常开发中只是用笔记记录自 ...

  5. 自动化部署-Jenkins+SVN+MSBuild

    这篇文章主要介绍下使用Jenkins实现自动化部署 下载 https://jenkins.io/download/ 安装 按步骤安装即可,下载的是windows版本,安装完成后,会看到这样一个正在运行 ...

  6. 1.0.0 Unity零基础入门——打砖块

    1)设置好相应场景 2)创建脚本挂载到相应物体上并编写 2.代码 //Shoot - - 控制小球生成与射击 using System.Collections; using System.Collec ...

  7. 501. Find Mode in Binary Search Tree【LeetCode by java】

    Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred ...

  8. 第十六次ScrumMeeting博客

    第十六次ScrumMeeting博客 本次会议于12月5日(二)22时整在3公寓725房间召开,持续20分钟. 与会人员:刘畅.张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容和链接): ...

  9. 冲刺Two之站立会议7

    今天我们把软件的基本功能完成之后,又对所有的界面进行了统一规范化并进行了相应的优化.

  10. Alpha 冲刺报告模板

    Alpha 冲刺报告模板 Deadline: 十分钟左右站立会议,控制好时间,不要在此会议上讨论细节问题. 每组一份博客,组内共享,每人都需提交. 模板 队名:xxx 组员1(组长) 今天完成了哪些任 ...