题目描述:

luogu

cf

cf

题解:

最短路+线段树优化建图。

考虑本题的边是点->点、段->点和点->段,我们可以建线段树然后拆成入点和出点。

入点:儿子->父亲,边权为0;

出点:父亲->儿子,边权为0;

叶子:出点->入点,边权为0;

那么连续的一段可以用不超过$log\;n$个节点表示,最后跑最短路即可。

代码:

  1. #include<queue>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. typedef long long ll;
  7. const int N = 100050;
  8. const ll Inf = 0x3f3f3f3f3f3f3f3fll;
  9. template<typename T>
  10. inline void read(T&x)
  11. {
  12. T f = 1,c = 0;char ch=getchar();
  13. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  14. while(ch>='0'&&ch<='9'){c=c*10+ch-'0';ch=getchar();}
  15. x = f*c;
  16. }
  17. int n,Q,S,hed[N*10],cnt,tot;
  18. ll dis[N*10];
  19. bool vis[N*10];
  20. struct EG
  21. {
  22. int to,nxt;
  23. ll w;
  24. }e[30*N];
  25. void ae(int f,int t,ll w)
  26. {
  27. e[++cnt].to = t;
  28. e[cnt].nxt = hed[f];
  29. e[cnt].w = w;
  30. hed[f] = cnt;
  31. }
  32. int sta[N],tl;
  33. struct segtree
  34. {
  35. int s[N<<2][2];
  36. void build(int l,int r,int u)
  37. {
  38. s[u][0]=++tot,s[u][1]=++tot;
  39. if(l==r){ae(s[u][1],s[u][0],0);return ;}
  40. int mid = (l+r)>>1;
  41. build(l,mid,u<<1),build(mid+1,r,u<<1|1);
  42. ae(s[u<<1][0],s[u][0],0),ae(s[u<<1|1][0],s[u][0],0);
  43. ae(s[u][1],s[u<<1][1],0),ae(s[u][1],s[u<<1|1][1],0);
  44. }
  45. int query(int l,int r,int u,int qx,int k)
  46. {
  47. if(l==r)return s[u][k];
  48. int mid = (l+r)>>1;
  49. if(qx<=mid)return query(l,mid,u<<1,qx,k);
  50. else return query(mid+1,r,u<<1|1,qx,k);
  51. }
  52. void query(int l,int r,int u,int ql,int qr,int k)
  53. {
  54. if(l==ql&&r==qr){sta[++tl]=s[u][k];return ;}
  55. int mid = (l+r)>>1;
  56. if(qr<=mid)query(l,mid,u<<1,ql,qr,k);
  57. else if(ql>mid)query(mid+1,r,u<<1|1,ql,qr,k);
  58. else query(l,mid,u<<1,ql,mid,k),query(mid+1,r,u<<1|1,mid+1,qr,k);
  59. }
  60. void print(int l,int r,int u)
  61. {
  62. if(l==r){if(dis[s[u][0]]==Inf)printf("-1 ");else printf("%lld ",dis[s[u][0]]);return ;}
  63. int mid = (l+r)>>1;
  64. print(l,mid,u<<1);print(mid+1,r,u<<1|1);
  65. }
  66. }tr;
  67. struct Pair
  68. {
  69. int x;ll y;
  70. Pair(){}
  71. Pair(int x,ll y):x(x),y(y){}
  72. bool operator < (const Pair&a)const{return y>a.y;}
  73. };
  74. priority_queue<Pair>q;
  75. void dij()
  76. {
  77. memset(dis,0x3f,sizeof(dis));
  78. S = tr.query(1,n,1,S,0);
  79. dis[S]=0;q.push(Pair(S,0));
  80. while(!q.empty())
  81. {
  82. Pair tp = q.top();q.pop();
  83. int u = tp.x;if(vis[u])continue;vis[u] = 1;
  84. for(int j=hed[u];j;j=e[j].nxt)
  85. {
  86. int to = e[j].to;
  87. if(dis[to]>dis[u]+e[j].w)
  88. {
  89. dis[to] = dis[u]+e[j].w;
  90. q.push(Pair(to,dis[to]));
  91. }
  92. }
  93. }
  94. }
  95. int main()
  96. {
  97. // freopen("tt.in","r",stdin);
  98. read(n),read(Q),read(S);
  99. tr.build(1,n,1);
  100. for(int op,a,b,c,d,i=1;i<=Q;i++)
  101. {
  102. read(op),read(a),read(b),read(c);
  103. if(op==1)
  104. {
  105. a = tr.query(1,n,1,a,0),b = tr.query(1,n,1,b,1);
  106. ae(a,b,c);
  107. }else
  108. {
  109. read(d);
  110. if(op==2)
  111. {
  112. int f = tr.query(1,n,1,a,0);
  113. tl = 0;tr.query(1,n,1,b,c,1);
  114. for(int j=1;j<=tl;j++)
  115. ae(f,sta[j],d);
  116. }else
  117. {
  118. tl = 0;tr.query(1,n,1,b,c,0);
  119. int t = tr.query(1,n,1,a,1);
  120. for(int j=1;j<=tl;j++)
  121. ae(sta[j],t,d);
  122. }
  123. }
  124. }
  125. dij();
  126. tr.print(1,n,1);
  127. puts("");
  128. return 0;
  129. }

CF786B/CF787D Legacy的更多相关文章

  1. [CF787D] legacy

    题目 Rick和他的同事们研究出了一种新的有关放射的公式,于是许多坏人就在追赶他们.所以Rick希望在被坏人抓住之前把遗产给Morty. 在他们的宇宙里总共有n颗行星,每颗行星有它自己的编号(编号为1 ...

  2. 【CF786B】Legacy

    题目大意:初始给定 N 个点,支持三种操作:两点之间连边:一个点与一个连续区间编号的点之间连边:一个连续区间内的点和一个点连边,求执行 N 次操作之后的单源最短路. 题解:学会了线段树优化建图. 发现 ...

  3. 题解 CF786B 【Legacy】

    本题要求我们支持三种操作: ① 点向点连边. ② 点向区间连边. ③ 区间向点连边. 然后跑最短路得出答案. 考虑使用线段树优化建图. 建两颗线段树,入树和出树,每个节点为一段区间的原节点集合.入树内 ...

  4. CF786B Legacy && 线段树优化连边

    线段树优化连边 要求点 \(x\) 向区间 \([L, R]\) 连边, 一次的复杂度上限为 \(O(n)\) 然后弄成线段树的结构 先父子连边边权为 \(0\) 这样连边就只需要连父亲就可以等效于连 ...

  5. CF786B Legacy(线段树优化建边)

    模板题CF786B Legacy 先说算法 如果需要有n个点需要建图 给m个需要建边的信息,从单点(或区间内所有点)向一区间所有点连边 如果暴力建图复杂度\(mn^2\) 以单点连向区间为例,在n个点 ...

  6. CF786B Legacy 线段树优化建图

    问题描述 CF786B LG-CF786B 题解 线段树优化建图 线段树的一个区间结点代表 \([l,r]\) 区间点. 然后建立区间点的时候就在线段树上建边,有效减少点的个数,从而提高时空效率. 优 ...

  7. 线段树优化建图 || CF786B Legacy

    题面:786B - Legacy 代码: #include<cstdio> #include<cstring> #include<iostream> #includ ...

  8. [CF787D]遗产(Legacy)-线段树-优化Dijkstra(内含数据生成器)

    Problem 遗产 题目大意 给出一个带权有向图,有三种操作: 1.u->v添加一条权值为w的边 2.区间[l,r]->v添加权值为w的边 3.v->区间[l,r]添加权值为w的边 ...

  9. CF786B Legacy(线段树优化建图)

    嘟嘟嘟 省选Day1T2不仅考了字符串,还考了线段树优化建图.当时不会,现在赶快学一下. 线段树能优化的图就是像这道题一样,一个点像一个区间的点连边,或一个区间像一个点连边.一个个连就是\(O(n ^ ...

随机推荐

  1. [故障]ceph存储池权限修改错误,导致存储池的业务hang住

    描述: 记录一次重大事故:根据IaaS资源业务要求,需要增加某些功能,所以要修改部署代码.修改后重推部署代码,检查发现没有什么异常. 但是一段时间后就收到用户的报障反馈,接连一个电话.2个电话.3个电 ...

  2. ensp练习:防火墙安全策略配置

    一.实验目的:1. 了解华为防火墙安全策略.2. 掌握华为防火墙安全策略的配置.二.实验仪器:计算机.华为ensp模拟器.华为防火墙三.实验内容:在这里插入图片描述根据网络拓扑图如上(交换机不需要配置 ...

  3. SpringMVC教程--eclipse中使用maven创建springMVC项目

    一.在eclipse中创建maven-archetype-webapp项目: 1.新建项目选择maven项目 2.默认,下一步 3.选择maven-archetype-webapp,其他保持默认即可 ...

  4. 教程10--hexo搭建

    1.安装node.js 下载系统对应的node安装包一直下一步完成 2.安装git 参照git安装https://www.cnblogs.com/daxiang2008/p/10687616.html ...

  5. docker学习笔记(6)——docker场景问题汇总(centos7 由于内核版本低带来的一系列问题,docker彻底卸载,安装、启动日志报错分析)

    参考资料: https://nachuan.blog.csdn.net/article/details/96041277 https://www.cnblogs.com/xzkzzz/p/962765 ...

  6. 报错:net::err_unknown_url_scheme的解决办法

    在项目中设置了api请求和web页面请求的地址,如下图: 控制台报错,如下图: 问题是:没有加入"http://"这个头,因此访问不到. 解决办法: 再次访问正常

  7. vue--加载模块详解

    1.postcss-loader.autoprefixer.css-loader .sass-loader:加载css模块及css预处理模块,添加浏览器前缀到CSS内容里 加载模块:npm insta ...

  8. laravel7 ORM和laravel模型操作

    1.什么是ORM 对象关系映射(Object Relation Maping),这个关系就是关系数据库.因此,顾名思义,ORM的核心是我们通过操作对应来操作关系数据库. ORM的优点:  ORM提供了 ...

  9. PHP Curl Accept-Encoding: gzip乱码问题解决

    在使用php curl对接hugegraph的过程中,发现向gremlin发送结果返回乱码,截图如下: 发现返回乱码的乱码请求中有Accept-Encoding: gzip,即返回的内容采用了gzip ...

  10. OSPF协议原理及配置5-LSA分析

    OSPF协议原理及配置5-LSA分析   前面,已经介绍了邻接关系的建立和LSDB的同步.通过同步过程的介绍,我们可以了解LSDB的同步是通过交互LSA实现的. 不同角色的路由器发出的LSA的内容是不 ...