你谷数据够强了,以前的A*应该差不多死掉了。

所以,小伙伴们快来一起把YL顶上去把!戳这里!

俞鼎力的课件

需要掌握的内容:

Dijkstra构建最短路径树。

可持久化堆(使用左偏树,因其有二叉树结构且能动态合并。构建方法类似可持久化线段树)。

#include<bits/stdc++.h>
#define RG register
#define R RG int
using namespace std;
const int N=5009,M=4e5+9;
int p,he[N],re[N],ne[M],to[M],f[N],rt[N];
double w[M],d[N];bool vis[N];
struct Heap{
double w;
int lc,rc,dep,end;
}t[M];//不要问我为什么过了
struct Node{
double w;int x;
inline bool operator<(RG Node a)const{
return w>a.w;
}
};
priority_queue<Node>q;
int merge(R x,R y,R op){//左偏树合并,op控制是否复制版本
if(!(x&&y))return x+y;
if(t[x].w>t[y].w)swap(x,y);
if(op)t[++p]=t[x],x=p;
t[x].rc=merge(t[x].rc,y,op);
if(t[t[x].lc].dep<t[t[x].rc].dep)swap(t[x].lc,t[x].rc);
t[x].dep=t[t[x].rc].dep+1;
return x;
}
int main(){
ios::sync_with_stdio(0);
R n,m,i,x,y,ans=0;
RG double E,now;
cin>>n>>m>>E;
for(i=1;i<=m;++i){
cin>>x>>y>>w[i];
ne[ i ]=he[x];to[he[x]= i ]=y;
ne[i+m]=re[y];to[re[y]=i+m]=x;
}
for(x=1;x<n;++x)d[x]=1e18;
q.push((Node){0,n});//Dijkstra开始
while(!q.empty()){
x=q.top().x;q.pop();
if(vis[x])continue;
vis[x]=1;
for(i=re[x];i;i=ne[i])
if(d[y=to[i]]>d[x]+w[i-m])
q.push((Node){d[y]=d[x]+w[i-m],y});
}
for(x=1;x<=n;++x){
if(d[x]==1e18)continue;
for(i=he[x];i;i=ne[i]){
if(d[x]==d[y=to[i]]+w[i]&&!f[x])f[x]=y;//构建最短路树
else if(d[y]!=1e18){
t[++p]=(Heap){d[y]+w[i]-d[x],0,0,1,y};
rt[x]=merge(rt[x],p,0);
}
}
q.push((Node){d[x],x});
}
while(!q.empty()){
x=q.top().x;q.pop();
if(f[x])rt[x]=merge(rt[x],rt[f[x]],1);//可持久化
}
if(E>=d[1])E-=d[1],++ans;
if(rt[1])q.push((Node){t[rt[1]].w,rt[1]});
while(!q.empty()){
now=q.top().w;x=q.top().x;q.pop();
if(E<now+d[1])break;
E-=now+d[1];++ans;
if((y=t[x].lc))q.push((Node){now-t[x].w+t[y].w,y});
if((y=t[x].rc))q.push((Node){now-t[x].w+t[y].w,y});
if((y=rt[t[x].end]))q.push((Node){now+t[y].w,y});
}
printf("%d\n",ans);
return 0;
}

k短路模板(洛谷P2483 [SDOI2010]魔法猪学院)(k短路,最短路,左偏树,priority_queue)的更多相关文章

  1. 洛谷 P2483 [SDOI2010]魔法猪学院

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

  2. 洛谷——P2483 [SDOI2010]魔法猪学院

    https://www.luogu.org/problem/show?pid=2483 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的 ...

  3. P2483 [SDOI2010]魔法猪学院

    P2483 [SDOI2010]魔法猪学院 摘要 --> 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世 ...

  4. [BZOJ1975][SDOI2010]魔法猪学院(k短路,A*)

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2748  Solved: 883[Submit][Statu ...

  5. bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]

    1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...

  6. BZOJ 1975: [Sdoi2010]魔法猪学院——K短路,A*

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1975 题意&简要做法 一张有向图,求出最多的互不相同的路径,满足路径长度之和\(\l ...

  7. BZOJ1975 [Sdoi2010]魔法猪学院 k短路

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1975 题意概括 给出一个无向图,让你走不同的路径,从1到n,路径长度之和不超过E,求最大路径条数. ...

  8. 【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院

    Description 找出1~k短路的长度.   Solution k短路的求解要用到A*算法 A*算法的启发式函数f(n)=g(n)+h(n) g(n)是状态空间中搜索到n所花的实际代价 h(n) ...

  9. BZOJ1975 SDOI2010魔法猪学院(启发式搜索+最短路+堆)

    对反图跑最短路求出每个点到终点的最短路径,令其为估价函数大力A*,第k次到达某个点即是找到了到达该点的非严格第k短路,因为估价函数总是不大于实际值.bzoj可能需要手写堆.正解是可持久化可并堆,至今是 ...

随机推荐

  1. 使用Vue自己做一个简单的MarkDown在线编辑器

    1.首先要下载mark组件. npm install marked --save 2.在Vcontent.vue中简单写一些样式. <template> <div class=&qu ...

  2. CRM系统(第一部分)

      阅读目录 1.需求分析 2.数据库表设计 3.起步 4.录入数据 5.知识点 1.需求分析 CRM客户关系管理软件---> 学员管理 用户:企业内部用户 用户量: 业务场景: 2.数据库表设 ...

  3. Java 学习使用常见的开源连接池

    目录 连接池介绍 自定义连接池 JDBC Tomcat Pool DBCP(DataBase Connection Pool) 使用配置文件来设置DBCP C3P0 Druid 连接池介绍 在说连接池 ...

  4. MySQL慢查询日志配置方式 slow_query_log

    MySQL慢查询(一) - 开启慢查询 - 鲁玉成 - 博客园 https://www.cnblogs.com/luyucheng/p/6265594.html mysql开启慢查询方法 - lava ...

  5. 关于spring的源码的理解

    从最基础的Hello World开始. spring的Hello World就三行代码: public void test() { ApplicationContext context = new C ...

  6. [转帖]Windows批处理(cmd/bat)常用命令小结

    Windows批处理(cmd/bat)常用命令小结 非常值得学习的文档 先放这里 有时间做实验, 转载自:“趣IT”微信公共号 前言 批处理文件(batch file)包含一系列 DOS命令,通常用于 ...

  7. Linux 下面 PG 的 uuid-ossp 包安装办法

    1. pgsql 安装 时报错, 如图示: 详细信息为: 执行SQL为: CREATE EXTENSION IF NOT EXISTS "uuid-ossp" 错误纤细信息为: C ...

  8. Django的分页和中间件

    一.分页 Django的分页器(paginator) view.py from django.shortcuts import render,HttpResponse # Create your vi ...

  9. CSS自定义属性expression_r

    CSS的出现使网页制作者在对网页元素的控制方便许多,当然,有利必有弊,CSS只能对颜色.大小.距离等静态样式有效,对于要实现某些html元素的动态样式就显得有些力不从心.有了CSS的自定义属性expr ...

  10. 创建安全客户端Socket

    SocketFactory factory = SSLSocketFactory.getDefault(); Socket socket = factory.create("localhos ...