【刷题】BZOJ 5415 [Noi2018]归程
www.lydsy.com/JudgeOnline/upload/noi2018day1.pdf
Solution
考试的时候打的可持久化并查集,没调出来QAQ
后面知道了kruskal重构树这个东西,感觉好简单啊
这道题就建出kruskal重构树后,对于两个点找到它们的LCA,其子树min就是答案
#include<bits/stdc++.h>
#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
const int MAXN=200000+10,MAXM=400000+10,inf=0x3f3f3f3f;
int T,n,m,e,beg[MAXN],nex[MAXM<<1],to[MAXM<<1],w[MAXM<<1],wt[MAXN<<1],Mn[MAXN<<1],cnt,d[MAXN],fa[MAXN<<1],Jie[20][MAXN<<1];
ll lastans;
struct node{
int u,v,l,a;
inline bool operator < (const node &A) const {
return a>A.a;
}
};
node side[MAXM];
struct cmp{
inline bool operator () (int a,int b) const {
return d[a]>d[b];
}
};
std::priority_queue<int,std::vector<int>,cmp> q;
template<typename T> inline void read(T &x)
{
T data=0,w=1;
char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
x=data*w;
}
template<typename T> inline void write(T x,char ch='\0')
{
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
if(ch!='\0')putchar(ch);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline void insert(int x,int y,int z)
{
to[++e]=y;
nex[e]=beg[x];
beg[x]=e;
w[e]=z;
}
inline void dijkstra()
{
for(register int i=1;i<=n;++i)d[i]=inf;
d[1]=0;
q.push(1);
while(!q.empty())
{
int x=q.top();
q.pop();
for(register int i=beg[x];i;i=nex[i])
if(d[to[i]]>d[x]+w[i])d[to[i]]=d[x]+w[i],q.push(to[i]);
}
}
inline int found(int x)
{
if(x!=fa[x])fa[x]=found(fa[x]);
return fa[x];
}
inline void init()
{
dijkstra();
cnt=n;
std::sort(side+1,side+m+1);
for(register int i=1;i<=n;++i)Mn[i]=d[i];
for(register int i=1;i<=n+n-1;++i)fa[i]=i,wt[i]=inf;
for(register int i=1,u,v;i<=m;++i)
{
u=found(side[i].u),v=found(side[i].v);
if(u==v)continue;
else
{
cnt++;
Mn[cnt]=min(Mn[u],Mn[v]);
wt[cnt]=side[i].a;
fa[u]=fa[v]=cnt;
Jie[0][u]=Jie[0][v]=cnt;
}
}
for(register int j=1;j<=19;++j)
for(register int i=1;i<=cnt;++i)Jie[j][i]=Jie[j-1][Jie[j-1][i]];
}
inline int Get(int x,int a)
{
for(register int i=19;i>=0;--i)
if(wt[Jie[i][x]]>a)x=Jie[i][x];
return x;
}
int main()
{
read(T);
while(T--)
{
e=0;lastans=0;
read(n);read(m);
for(register int i=1;i<=n;++i)beg[i]=0;
for(register int i=1,u,v,l,a;i<=m;++i)
{
read(u);read(v);read(l);read(a);
side[i]=(node){u,v,l,a};
insert(u,v,l);insert(v,u,l);
}
init();
ll Q,K,S;
read(Q);read(K);read(S);
while(Q--)
{
ll v0,p0,v,p;read(v0);read(p0);
v=(v0+1ll*K*lastans-1)%n+1;
p=(p0+1ll*K*lastans)%(S+1);
write(lastans=Mn[Get(v,p)],'\n');
}
}
return 0;
}
【刷题】BZOJ 5415 [Noi2018]归程的更多相关文章
- [BZOJ] 5415: [Noi2018]归程
在做Kruskal求最小生成树时,假设要通过边权\(w\)的边合并子树\(x\)和\(y\),我们新建一个方点,把两个子树接到这个方点上,并将方点的点权赋为\(w\),最终形成的二叉树就是\(Krus ...
- BZOJ 5415: [Noi2018]归程(kruskal重构树)
解题思路 \(NOI2018\)的\(Day1\) \(T1\),当时打网络赛的时候不会做.学了一下\(kruskal\)重构树后发现问题迎刃而解了.根据\(kruskal\)的性质,如果要找从\(u ...
- [LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程
[LOJ 2718][UOJ 393][BZOJ 5415][NOI 2018]归程 题意 给定一张无向图, 每条边有一个距离和一个高度. 再给定 \(q\) 组可能在线的询问, 每组询问给定一个点 ...
- 【刷题】BZOJ 2407 探险
Description 探险家小T好高兴!X国要举办一次溶洞探险比赛,获奖者将得到丰厚奖品哦!小T虽然对奖品不感兴趣,但是这个大振名声的机会当然不能错过! 比赛即将开始,工作人员说明了这次比赛的规则: ...
- 【刷题】BZOJ 4543 [POI2014]Hotel加强版
Description 同OJ3522 数据范围:n<=100000 Solution dp的设计见[刷题]BZOJ 3522 [Poi2014]Hotel 然后发现dp的第二维与深度有关,于是 ...
- 【刷题】BZOJ 4316 小C的独立集
Description 图论小王子小C经常虐菜,特别是在图论方面,经常把小D虐得很惨很惨. 这不,小C让小D去求一个无向图的最大独立集,通俗地讲就是:在无向图中选出若干个点,这些点互相没有边连接,并使 ...
- 【刷题】BZOJ 4176 Lucas的数论
Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目"求Sigma(f(i)),其中1<=i< ...
- BZOJ第一页刷题计划
BZOJ第一页刷题计划 已完成:67 / 90 [BZOJ1000]A+B Problem:A+B: [BZOJ1001][BeiJing2006]狼抓兔子:最小割: [BZOJ1002][FJOI2 ...
- 【刷题】BZOJ 2260 商店购物
Description Grant是一个个体户老板,他经营的小店因为其丰富的优惠方案深受附近居民的青睐,生意红火.小店的优惠方案十分简单有趣.Grant规定:在一次消费过程中,如果您在本店购买了精制油 ...
随机推荐
- CSS清浮动办法
骨灰级解决办法: .clear{clear:both;height:0;overflow:hidden;} 上诉办法是在需要清除浮动的地方加个div.clear或者br.clear,我们知道这样能解决 ...
- 【UGUI】 (三)------- 背包系统(上)之简易单页背包系统及检索功能的实现
背包系统,无论是游戏还是应用,都是常常见到的功能,其作用及重要性不用我多说,玩过游戏的朋友都应该明白. 在Unity中实现一个简易的背包系统其实并不是太过复杂的事.本文要实现的是一个带检索功能的背包系 ...
- play-with-vim1~5
1.移动 h,j,k,l分别对应左下上右 2.模式 vim有四种模式:普通模式,插入模式,可视模式,命令行模式 进入vim 默认为普通模式,光标为方块 输入i 进入插入模式,窗口左下角为insert ...
- springmvc使用ajax进行数据交互时,session失效问题(@ResponseBody与session能否同时使用?)
今天做博客demo的时候遇到了这样的问题:当我用ajax进行资源请求时,需要顺便将账户信息存入session.但是后来发现有@Responsebody标签时,直接用HttpSession存数据时,根本 ...
- Discuz3.3精仿小米风格整站模板制作——1、新建模板方案
术语说明: 模板——模板是一堆按照规定命名方式的html文件,用于指定整个论坛不同页面的外观. 标签——标签和模板共同作用以实现论坛换肤功能,其中标签主要控制页面显示什么数据,显示多少条等. 风格—— ...
- Redis的C语言客户端(hiredis)的安装和使用
关键词:hiredis, cRedis, redis clients, redis客户端, C客户端, 华为云分布式缓存服务 hiredis是一个非常全面的C语言版redis接口库,支持所有命令.管道 ...
- 第一个scrim任务分布
一.项目经理:郭健豪 二.scrim分工 杨广鑫.郭健豪:制作第一个精选页面布局,和代码实现.如:实现图书推荐布局中图书的排布,搜索框代码的实现,消息提示的跳转 李明.郑涛:实现第一个精选页面数据库的 ...
- 进阶系列(10)—— C#元数据和动态编程
一.元数据的介绍 元数据是用来描述数据的数据(Data that describes other data).单单这样说,不太好理解,我来举个例子.下面是契诃夫的小说<套中人>中的一段,描 ...
- 内网php项目访问(切换在线解决)
之前内网访问出现过问题: 可参考手机访问本地php项目遇到的问题及解决(2015-06-20 09:41) 后来重装wamp之后,要访问还是出现问题 即http://192.168.191.1/mui ...
- jsp与Ajax技术
Ajax 是Asynchronous Javascript and XML的缩写,异步的JavaScript和xml.Ajax是由JavaScript.XML.CSS.DOM等多种已有技术的结合,它可 ...