解题:NOI 2018 归程
清新友好的题目
跑一个最短路,然后对海拔建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 归程的更多相关文章
- [LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程
[LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程 题意 给定一张无向图, 每条边有一个距离和一个高度. 再给定 \(q\) 组可能在线的询问, 每组询问给定一个点 ...
- [NOI 2018] 归程
Description 传送门 Solution 65分做法 先求出每个点到\(1\)号点的最短路,记为\(d[i]\).然后按照海拔从大到小依次加边,并查集维护每个连通块中\(d[i]\)的最小值, ...
- NOI 2018 归程 (Kruskal重构树)
题目大意:太长了,略 Kruskal重构树,很神奇的一个算法吧 如果两个并查集被某种条件合并,那么这个条件作为一个新的节点连接两个并查集 那么在接下来的提问中,如果某个点合法,它的所有子节点也都合法, ...
- [LOJ 2720][BZOJ 5417][UOJ 395][NOI 2018]你的名字
[LOJ 2720][BZOJ 5417][UOJ 395][NOI 2018]你的名字 题意 给定一个大串 \(S\) 以及 \(q\) 次询问, 每次询问给定一个串 \(T\) 和区间 \([l, ...
- NOI 2018 酱油记
转眼离 NOI 2018 已经过了一个星期了,退役的我还是随便来水水吧. 语法.错字之类的可能会很多,但是我也不拘这点小节了. 恭喜 yww, zjt, sk 进队,zwl, myh au , yay ...
- [LOJ 2721][UOJ 396][BZOJ 5418][NOI 2018]屠龙勇士
[LOJ 2721][UOJ 396][BZOJ 5418][NOI 2018]屠龙勇士 题意 题面好啰嗦啊直接粘LOJ题面好了 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照 ...
- NOI Day1T1归程(Kruskal重构树+Dijkstra)
NOI Day1T1归程(Kruskal重构树+Dijkstra) 题目 洛谷题目传送门 题解 其实我不想写......,所以...... 挖个坑......我以后一定会补的 luogu的题解讲的还是 ...
- 【NOI 2018】归程(Kruskal重构树)
题面在这里就不放了. 同步赛在做这个题的时候,心里有点纠结,很容易想到离线的做法,将边和询问一起按水位线排序,模拟水位下降,维护当前的各个联通块中距离$1$最近的距离,每次遇到询问时输出所在联通块的信 ...
- 「NOI 2018」归程「Kruskal 重构树」
题解 Kruskal重构树:每次一条边连接两个集合,建一个新点,点权为该边边权:把这两个集合的根连向新点. 性质:(如果求的是最大生成树)叶子结点是图中实际结点:叶子到根路径上点权递减:两点间lca的 ...
随机推荐
- GBDT源码剖析
如今,GBDT被广泛运用于互联网行业,他的原理与优点这里就不细说了,网上google一大把.但是,我自认为自己不是一个理论牛人,对GBDT的理论理解之后也做不到从理论举一反三得到更深入的结果.但是学习 ...
- mfc Edit控件属性
设置Edit控件属性 窗口创建顺序 初始化Edit控件数据 一.设置Edit控件属性 .Align Text :Right 二.窗口创建顺序 CMywindowdlg: 窗口构造函数 OnCreate ...
- java之平台无关
java虚拟机是执行字节码文件(.class)的虚拟机进程. java源程序(.java)被编译器编译成------>字节码文件(.class),然后字节码文件,将由java虚拟机,解释成--- ...
- 基于RapidJSON的操作库
需要安装配置RapidJSON库 /******************************************************************* * summery: 提供便 ...
- opengl学习记录1——矩形绘制
#include <windows.h> #include <gl/GL.h> #include <gl/GLU.h> #include <glut.h> ...
- HTML5 之 FileReader 方法上传并读取文件
原文地址:https://caochangkui.github.io/file-upload/ HTML5 的 FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据 ...
- [CF983D]Arkady and Rectangles[线段树+可删堆/set]
题意 你有一个无限大的绘图板,开始颜色是\(0\) , 你将进行\(n\) 次绘图,第\(i\) 次绘图会将左下角为 \((x_1, y_1)\),右上角为\((x_2, y_2)\) 的矩形涂成颜色 ...
- 设计模式 笔记 中介者模式 Mediator
//---------------------------15/04/27---------------------------- //Mediator 中介者模式----对象行为型模式 /* 1:意 ...
- java实现基于关键字的文件夹(文件)的搜索、文件夹(文件)的复制、删除
最近在做一个项目,需要实现这几项功能,上网查了很多资料,自己研究了好几天终于实现了,现在与大家分享一下. 一.JAVA实现文件夹的搜索 在百度搜索N个技术文章,从哪些大牛们共享的资料中终于写出了我 ...
- NameNode内存溢出和DataNode请求超时异常处理
问题背景 春节假期间,接连收到监控程序发出的数据异常问题,赶忙连接上跳板机检查各服务间的状态,发现Datanode在第二台.第三台从节点都掉线了,通过查看Datanode和Namenode运行日志,发 ...