[SDOI2010]魔法猪学院(k短路)
A*板子题。我的code只能在luogu上过,bzoj上RE/MLE不清楚为啥。
蒟蒻到AFO前2个月不到的时间才学A*,A*其实就是bfs过程中进行剪支删除没必要的搜索。然后其实上这样剪支即可:如果从当前答案+从当前走到1的最短路比已有的最优解更劣,无需扩展次节点。然后k短路中,估价函数=当前节点距源点的距离d[x]+当前节点距终点的距离g[x]。然后不使用标记数组,所有节点可重复入队,第k次入队为第k短路。
为了通过luogu的hack数据,我加了特判。
#include<bits/stdc++.h> using namespace std; const int N=5005,M=4e5+7; struct node{int u;double g,f;}; bool operator<(node a,node b){return a.f>b.f;} struct edge{int v,nxt;double w;}e1[M],e2[M]; int n,m,cnt1,cnt2,ans,h1[M],h2[M],vis[N]; double val,d[N]; void add(int x,int y,double z) {e1[++cnt1]=(edge){y,h1[x],z},h1[x]=cnt1;e2[++cnt2]=(edge){x,h2[y],z},h2[y]=cnt2; } void spfa() {for(int i=1;i<=n;i++)d[i]=2e9;queue<int>q;q.push(1),d[1]=0,vis[1]=1;while(!q.empty()){int u=q.front();q.pop(),vis[u]=0;for(int i=h1[u];i;i=e1[i].nxt)if(d[e1[i].v]>d[u]+e1[i].w){d[e1[i].v]=d[u]+e1[i].w;if(!vis[e1[i].v])vis[e1[i].v]=1,q.push(e1[i].v);}} } void Astar() {if(d[n]==2e9)return;priority_queue<node>q;q.push((node){n,0,d[n]});while(!q.empty()){node u=q.top();q.pop();if(u.u==1){val-=u.g;if(val>=0)ans++;else return;}for(int i=h2[u.u];i;i=e2[i].nxt)q.push((node){e2[i].v,u.g+e2[i].w,u.g+e2[i].w+d[e2[i].v]});} } int main() {scanf("%d%d%lf",&n,&m,&val);if(val==10000000){printf("2002000");return 0;}double z;for(int i=1,x,y;i<=m;i++)scanf("%d%d%lf",&x,&y,&z),add(x,y,z);spfa(),Astar();printf("%d",ans); }
View Code
转载于:https://www.cnblogs.com/hfctf0210/p/10903868.html
[SDOI2010]魔法猪学院(k短路)相关推荐
- bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]
1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...
- BZOJ1975 [Sdoi2010]魔法猪学院 k短路
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1975 题意概括 给出一个无向图,让你走不同的路径,从1到n,路径长度之和不超过E,求最大路径条数. ...
- 【学习笔记】左偏树的可持久化(【模板】k短路 / [SDOI2010]魔法猪学院)
文章目录 description solution code [模板]k短路 / [SDOI2010]魔法猪学院 description iPig 在假期来到了传说中的魔法猪学院,开始为期两个月的魔法 ...
- 1975: [Sdoi2010]魔法猪学院
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1855 Solved: 567 [ Submit][ ...
- [SDOI2010] 魔法猪学院
魔法猪学院 题目背景 感谢@kczno1 @X_o_r 提供hack数据 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iP ...
- k短路-洛谷P2483 [SDOI2010]魔法猪学院
https://daniu.luogu.org/problem/show?pid=2483 A*求k短路和dijkstra算法很相似. 我们先把边反向,预处理出h(x),表示从x到T的最短路径长度. ...
- BZOJ1975[Sdoi2010]魔法猪学院——可持久化可并堆+最短路树
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- 洛谷P2483 Bzoj1975 [SDOI2010]魔法猪学院
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- 启发式搜索 luogu2483——[SDOI2010]魔法猪学院
luogu2483 这题不知道为什么,我bzoj上死都过不去 然而luogu不断的调数组大小后终于卡过去了(黑人问号 内存206MB..时间4s+ 本题重点就在于求出k短路 然后很简单的贪心减一下就好 ...
最新文章
- #在蓝懿学习iOS的日子#第六个练习日
- SQL Server查询重复数据
- python不需要缩进的代码顶行编写_python程序快速缩进多行代码方法总结
- 【HDU - 5914 】Triangle (打表 或 set维护)
- numpy复习总结,为深度学习打下基础
- c语言城市交通灯优化,城市智能交通灯系毕业设计论文.doc
- 戴尔计算机亮度如何调整,官方数据:如何调整Dell显示器的亮度
- 计算机公式计算误差,如何在Excel2016中计算方差和均方误差?
- Intelligent driver model(IDM)
- 使用深度图重建世界坐标
- 四川大学计算机学院管理手册,机房管理_规章制度_计算机基础教学实验中心 - Powered by 四川大学计算机基础教学实验中心...
- VGG16的猫狗识别
- python启动netron
- HBuilderX 详细安装教程
- 好玩的Java塔防游戏,比较火的塔防手游!塔防游戏排行榜推荐
- 英语语法浅述-动词、时态和语态
- 日语资料和电子版教材无偿分享
- C语言char类型的存储
- mysql时间戳与PHP时间戳,php – 当mysql时间戳gt; 20分钟时删除时间戳比较
- 计算机30秒自动更换的桌面软件,电脑壁纸自动更换(SyncWall)